c语言程序存为bin程序,对文件进行加密与解密(c语言)-bin文件打开
操作界面
加密前的文件:
加密后的文件
将加密后的文件解密后即可还原
初始密码为: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文件打开相关推荐
- php dse加密,dse-src 这个极其小巧(9k)的加密程序对文件进行加密及解密的速度与资 联合开发网 - pudn.com...
dse-src 所属分类:加密解密 开发工具:C/C++ 文件大小:20KB 下载次数:1 上传日期:2009-05-04 15:11:23 上 传 者:自由民 说明: 这个极其小巧(9k)的加密程 ...
- php程序文件免费加密软件,FileWall – 免费实用的文件(夹)加密软件工具!
引自官方介绍: FileWall 是一款免费的轻量级基于文件系统的透明加密软件,集成于资源管理器右键菜单,使用效果最终类似于NTFS自带的文件加密功能,但FileWall 又不那么紧密的贴合于系统,也 ...
- java开发文件夹加密解密程序_Java应用开发:文件加密解密
本人记性不是很好,总是忘记些重要信息,特别是密码,很多时间登录都要试好几个密码才成功.所以想到了把 这些容易忘记的重要信息记录到一个文本文件上,再对其加密(不易忘记的密码).对文件的加密,自己写了个小 ...
- c语言 文件加密与解密
本程序是一个c语言的大作业的一部分 是简单的基于给定密钥实现的加密解密程序 希望能给后来人一些参考 文件的传输会有明文和密文的区别,明文发送是不安全的.本题目实现对文件的加密和解密操作,采用的加密算法 ...
- 用c语言对文件进行加密
用C语言对文件进行简单加密的操作,这里主要用的加密思路是破坏文件头,使得系统无法识别文件从而进行加密,最初的思路是将用户输入的加密口令转成ASCII码,再与文件头数据循环进行异或操作,从而破坏文件头数 ...
- c语言实现的异或加解密,C语言实现视频异或加/解密
C语言实现异或加/解密的原理 异或原理很简单,异或一次为加密,再异或一次就成了解密了.看下代码 /** * 加密/解密文件 * *@param sourcefile 要加密/解密的文件名 *@para ...
- c语言编程文件的加密解密,C语言实现任何文件的加密解密功能
本文实例为大家分享了C语言实现文件加密解密功能的具体代码,供大家参考,具体内容如下 使用命令提示符,实现任何文件的加密和解密功能. 代码如下: //#define _CRT_SECURE_NO_WAR ...
- 单片机c语言存数据,单片机中C语言的数据存储与程序编写
一.五大内存分区 内存分成5个区,它们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区. 1.栈区(stack):FIFO就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区. ...
- c语言编数控机床宏程序,数控车床宏程序怎么编啊?
宏程序 序 大家都在问宏程序~其实说起来宏就是用公式来加工零件的,比如说椭圆,如果没有宏的话,我们要逐点算出曲线上的点,然后慢慢来用直线逼近,如果是个光洁度要求很高的工件的话,那么需要计算很多的点,可 ...
最新文章
- Windows Server 2008 R2 SP1 安装NET FrameWork 4.0 受阻滞问题解决办法。
- 为什么我们需要域?Active Directory系列之一
- SVN服务器部署并实现双机同步及禁止普通用户删除文件
- jQuery的概念、用法、常见面试题详解
- SQL的各种使用方法
- Java 之 合成模式
- macsfancontrol 设置方法_重庆市材料好的消防应急筒灯使用方法
- 一楼土木人序列号查询_iPhone序列号是什么 序列号怎么查看【步骤】
- 2021第十二届蓝桥杯省赛B组原题答案及总结
- 基于单片机的银行排队叫号系统的设计
- qq连连看分析编写简单辅助
- 生产仓储条码外贸管理解决方案
- 5G无线技术基础自学系列 | 大规模天线阵列
- 正则表达式网络三剑客之awk
- 证书有效性验证、根证书
- 全新的Uber App设计
- ijkplayer环境搭建
- CAD如何快速查找图纸的存放位置?怎么实现快速看图?
- 1_一些文献中的英文解释和用法整理
- 基于Altium Designer10的PCB设计入门过程