操作界面

加密前的文件:

加密后的文件

将加密后的文件解密后即可还原

初始密码为:hujing

开发环境:vc6.0

操作系统:windows

源代码

/**************************************************

*** 实现了对一个文件进行加密和解密 ***

*** 作者:胡靖 ***

*** 版本:1.0 ***

**************************************************/

#include

#include

#include

void Print();

int Encryption();

int PasswordVerify();

int PasswordChange();

int PasswordGet();

char Password[30] = "hujing";

char Password_K[30] = "123451234512345123451234512345";

char PasswordPath[] = "c:\\string.txt";

int main(){

int i;

PasswordGet();

if(PasswordVerify() == 0){

printf("密码验证失败!\n");

getch();

exit(1);

}else{

printf("验证通过!\n");

getch();

}

while(1){

system("cls");//清屏

fflush(stdin);//清空缓冲区

Print();

scanf("%d", &i);

switch(i){

case 1:

case 2: Encryption(); break;

case 3: PasswordChange(); break;

case 0: exit(1);

default: printf("输入异常!\n");

printf("按任意键继续..........");

getch();

}

}

return 0;

}

//输出界面

void Print(){

printf("*******************************************\n");

printf("***** 1.加密 ****\n");

printf("***** 2.解密 ****\n");

printf("***** 3.修改密码 ****\n");

printf("***** 0.退出 ****\n");

printf("*******************************************\n");

}

//获取登录密码

int PasswordGet(){

FILE *PasswordBin;

int i, num;

PasswordBin = fopen(PasswordPath, "rb");

//文件打开失败(第一次登陆)

if(PasswordBin == NULL){

num = strlen(Password);

PasswordBin = fopen(PasswordPath, "wb");

system("attrib +H c:\\string");

//将初始密码转码

for(i = 0; i < num; i++){

Password[i] ^= Password_K[i];

}

Password[i] = '\0';

//将密码写入文件

if( fwrite(Password, 1, num, PasswordBin) == 0){

printf("文件写入失败!\n");

exit(1);

}

//还原密码

for(i = 0; i < num; i++){

Password[i] ^= Password_K[i];

}

Password[i] = '\0';

return 1;

}

//读取密码并转码

fread(Password, 1, 30, PasswordBin);

for(i = 0; i < strlen(Password); i++){

Password[i] ^= Password_K[i];

}

return 0;

}

//加密\解密函数

int Encryption(){

char BeforeFile_s[30], //加密前文件路径

Key_s[30], //密钥

AfterFile_s[30]; //加密后文件路径

FILE *BeforeFile, //加密前文件

*AfterFile; //加密后文件

char Buffer[50]; //缓存数组

int ReadNum, //读取的长度

KeyNum; //密钥的长度

int i;

//接收文件路径及密钥

printf("请输入原文件的完整路径:\n");

fflush(stdin);

scanf("%s", BeforeFile_s);

printf("请输入新建文件的完整路径:\n");

fflush(stdin);

scanf("%s", AfterFile_s);

printf("请输入加密 密钥:\n");

fflush(stdin);

scanf("%s", Key_s);

KeyNum = strlen(Key_s);

//打开前文件

BeforeFile = fopen(BeforeFile_s, "rb");

if(BeforeFile == NULL){

printf("文件[%s]打开失败!\n", BeforeFile_s);

printf("按任意键继续..........");

getch();

return 1;

}

//打开后文件

AfterFile = fopen(AfterFile_s, "wb");

if(AfterFile == NULL){

printf("文件[%s]打开失败!\n", AfterFile_s);

printf("按任意键继续..........");

getch();

fclose(BeforeFile);

return 1;

}

//进行文件加密\解密

while((ReadNum = fread(Buffer, 1, KeyNum, BeforeFile)) != 0){

for(i = 0; i < ReadNum; i++){

Buffer[i] ^= Key_s[i];

}

if( fwrite(Buffer, 1, ReadNum, AfterFile) == 0){

printf("文件写入失败!\n");

printf("按任意键继续..........");

getch();

fclose(BeforeFile);

fclose(AfterFile);

return 1;

}

}

printf("操作成功!\n");

printf("按任意键继续..........");

getch();

fclose(BeforeFile);

fclose(AfterFile);

return 0;

}

//密码验证函数

int PasswordVerify(){

char Password_s[30];

int i, j;

for(i = 0; i < 3; i++){

printf("请输入验证密码(第%d次,还剩%d次):\n", i+1, 3-i);

fflush(stdin);

//接收键盘录入

for(j = 0; 1; j++){

Password_s[j] = getch();

//输入回车时

if(Password_s[j] == '\r'){

Password_s[j] = '\0';

break;

}

//输入退格时

if(Password_s[j] == '\b'){

printf("\b \b");

j -= 2;

if(j < 0){

j = -1;

}

continue;

}

printf("*");

}

printf("\n");

if(strcmp(Password_s, Password) == 0){

return 1;

}

}

return 0;

}

//密码修改函数

int PasswordChange(){

FILE *PasswordBin;

char Password_s[30], Password_ss[30];

int i, j;

//验证原密码

if(PasswordVerify() == 0){

printf("验证失败!\n");

printf("按任意键继续..........");

return 0;

}

printf("请输入新密码:\n");

fflush(stdin);

//接收键盘录入

for(j = 0; 1; j++){

Password_s[j] = getch();

//输入回车时

if(Password_s[j] == '\r'){

Password_s[j] = '\0';

break;

}

//输入退格时

if(Password_s[j] == '\b'){

printf("\b \b");

j -= 2;

if(j < 0){

j = -1;

}

continue;

}

printf("*");

}

printf("\n");

printf("请再次输入:\n");

fflush(stdin);

//接收键盘录入

for(j = 0; 1; j++){

Password_ss[j] = getch();

//输入回车时

if(Password_ss[j] == '\r'){

Password_ss[j] = '\0';

break;

}

//输入退格时

if(Password_ss[j] == '\b'){

printf("\b \b");

j -= 2;

if(j < 0){

j = -1;

}

continue;

}

printf("*");

}

printf("\n");

//验证两次输入密码是否相同

if(strcmp(Password_s, Password_ss) != 0){

printf("两次密码输入不同!修改失败!\n");

printf("按任意键继续..........");

getch();

return 0;

}

//将修改后的密码写入文件

PasswordBin = fopen(PasswordPath, "wb");

for(i = 0; i < strlen(Password_s); i++){

Password_s[i] ^= Password_K[i];

}

fwrite(Password_s, 1, strlen(Password_s), PasswordBin);

printf("密码修改成功!\n");

printf("按任意键继续..........");

getch();

return 0;

}

c语言程序存为bin程序,对文件进行加密与解密(c语言)-bin文件打开相关推荐

  1. php dse加密,dse-src 这个极其小巧(9k)的加密程序对文件进行加密及解密的速度与资 联合开发网 - pudn.com...

    dse-src 所属分类:加密解密 开发工具:C/C++ 文件大小:20KB 下载次数:1 上传日期:2009-05-04 15:11:23 上 传 者:自由民 说明:  这个极其小巧(9k)的加密程 ...

  2. php程序文件免费加密软件,FileWall – 免费实用的文件(夹)加密软件工具!

    引自官方介绍: FileWall 是一款免费的轻量级基于文件系统的透明加密软件,集成于资源管理器右键菜单,使用效果最终类似于NTFS自带的文件加密功能,但FileWall 又不那么紧密的贴合于系统,也 ...

  3. java开发文件夹加密解密程序_Java应用开发:文件加密解密

    本人记性不是很好,总是忘记些重要信息,特别是密码,很多时间登录都要试好几个密码才成功.所以想到了把 这些容易忘记的重要信息记录到一个文本文件上,再对其加密(不易忘记的密码).对文件的加密,自己写了个小 ...

  4. c语言 文件加密与解密

    本程序是一个c语言的大作业的一部分 是简单的基于给定密钥实现的加密解密程序 希望能给后来人一些参考 文件的传输会有明文和密文的区别,明文发送是不安全的.本题目实现对文件的加密和解密操作,采用的加密算法 ...

  5. 用c语言对文件进行加密

    用C语言对文件进行简单加密的操作,这里主要用的加密思路是破坏文件头,使得系统无法识别文件从而进行加密,最初的思路是将用户输入的加密口令转成ASCII码,再与文件头数据循环进行异或操作,从而破坏文件头数 ...

  6. c语言实现的异或加解密,C语言实现视频异或加/解密

    C语言实现异或加/解密的原理 异或原理很简单,异或一次为加密,再异或一次就成了解密了.看下代码 /** * 加密/解密文件 * *@param sourcefile 要加密/解密的文件名 *@para ...

  7. c语言编程文件的加密解密,C语言实现任何文件的加密解密功能

    本文实例为大家分享了C语言实现文件加密解密功能的具体代码,供大家参考,具体内容如下 使用命令提示符,实现任何文件的加密和解密功能. 代码如下: //#define _CRT_SECURE_NO_WAR ...

  8. 单片机c语言存数据,单片机中C语言的数据存储与程序编写

    一.五大内存分区 内存分成5个区,它们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区. 1.栈区(stack):FIFO就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区. ...

  9. c语言编数控机床宏程序,数控车床宏程序怎么编啊?

    宏程序 序 大家都在问宏程序~其实说起来宏就是用公式来加工零件的,比如说椭圆,如果没有宏的话,我们要逐点算出曲线上的点,然后慢慢来用直线逼近,如果是个光洁度要求很高的工件的话,那么需要计算很多的点,可 ...

最新文章

  1. Windows Server 2008 R2 SP1 安装NET FrameWork 4.0 受阻滞问题解决办法。
  2. 为什么我们需要域?Active Directory系列之一
  3. SVN服务器部署并实现双机同步及禁止普通用户删除文件
  4. jQuery的概念、用法、常见面试题详解
  5. SQL的各种使用方法
  6. Java 之 合成模式
  7. macsfancontrol 设置方法_重庆市材料好的消防应急筒灯使用方法
  8. 一楼土木人序列号查询_iPhone序列号是什么 序列号怎么查看【步骤】
  9. 2021第十二届蓝桥杯省赛B组原题答案及总结
  10. 基于单片机的银行排队叫号系统的设计
  11. qq连连看分析编写简单辅助
  12. 生产仓储条码外贸管理解决方案
  13. 5G无线技术基础自学系列 | 大规模天线阵列
  14. 正则表达式网络三剑客之awk
  15. 证书有效性验证、根证书
  16. 全新的Uber App设计
  17. ijkplayer环境搭建
  18. CAD如何快速查找图纸的存放位置?怎么实现快速看图?
  19. 1_一些文献中的英文解释和用法整理
  20. 基于Altium Designer10的PCB设计入门过程

热门文章

  1. Java算法面试题 一个顺子带一对
  2. POJ1149 PIGS
  3. 【洛谷P1816 忠诚】线段树
  4. 自对齐(self-aligned)
  5. UIKIT网页基本结构学习
  6. MAC下《暗黑世界》客户端版本编译说明!!
  7. android nfcDemo
  8. Hadoop安装记录(伪分布式)
  9. Mac下如何查看Python的版本?
  10. Js中的callback机制