如何用C语言对文件进行加密和解密?急求......................
发布网友
发布时间:2022-04-22 15:38
我来回答
共3个回答
热心网友
时间:2023-11-11 02:13
文件分为文本文件和二进制文件。加密方法也略有不同。
1、文本文件
加密的主要是文本的内容,最简单的方法就是修改文档的内容,比如1.txt中的文件内容:
abcd
只要给每一个字符+1,就可以实现加密。文件内容即会变为
bcde
2、二进制文件加密
二进制文件加密也就是对应用程序加密,需要理解可执行文件格式,比如Windows平台的Exe文件它是PE结构,Linux上的可执行文件是ELF结构,要对这样的程序进行加密,实际上是开发一种叫做“壳”的程序,这种程序的开发,需要将扎实的底层基础,同时也需要对软件加密解密有细致的理解,比如流行的vmprotect、z壳以及早些年的upx壳、aspack等等。
3、无论哪种加密都牵涉到文件操作的问题,使用C语言进行文件操作时,极少使用C标准库中的I/O函数,大多数使用操作系统提供的内存文件映射相关的API函数,有兴趣,可以搜索相关的资料。
热心网友
时间:2023-11-11 02:13
对于加密要求不高的完全可以自己定义规则来进行加密。这种加密是很简单很自由的,例如你在存文件的时候可以将文件中的每个字符都加上一个数,然后读取该文件的时候再每个字符相应地减去那个数,即可实现就简单的加密,这样你储存的文件看上去就是乱码了。只是这个规则太简单,规则你可以自己定,加密与解密对着来就行了。
下面程序用异或操作对文件进行加密和解密
/****************** 设计思路 ******************/
// 根据用户输入的加密/机密密码,
// 每次都拿原文件和密码等长度的一个字符串和密码
// 对应元素异或进行加密/解密
// 另外因为是用异或方法,所以加密和解密就是同一个程序
// 即按照同样的加密即是对文件的解密
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>
#include <stdlib.h>
char filename[256]; // 原文件
char password[256]; // 加密/解密密码
const char filenametemp[] = "temp15435255435325432543.temp"; // 加密/解密中间文件
void inputpass(char *pass); //密码输入以"******"显示
void main() {
FILE *fp; // 加密/解密的文件
FILE *fptemp; // 加密/解密过程临时文件
int pwdlen; // 密码长度
int i = 0; // 计数器
char ch = 0; // 读入的字符
printf("请输入要加密/解密的文件名(全路径名): \n");
gets(filename);
if( (fp = fopen(filename, "rb")) == NULL) {
printf("找不到文件 %s\n", filename);
exit(1);
} // if
printf("请输入要加密/解密的密码: \n");
inputpass(password);
pwdlen = strlen(password);
if(pwdlen == 0) {
printf("密码不能为空,加密/解密失败\n");
exit(1);
} // if
fptemp = fopen(filenametemp, "wb"); // 打开中间文件
while(1) {
ch = fgetc(fp);// 从原文件读入一个字符
if(feof(fp)) { // 已经读到文件尾
break; // 退出循环
}
ch ^= password[i++]; // 对原字符和密码进行异或操作
fputc(ch, fptemp); // 将异或结果写入中间文件
if(i == pwdlen) { // 使得原文件每和密码长度相同的固定长度异或加密
i = 0;
}
} // while
fclose(fp); // 关闭打开原文件
fclose(fptemp); // 关闭打开中间文件
remove(filename); // 删除原文件
rename(filenametemp, filename); // 将中间文件重命名为原文件
printf("加密/解密成功\n"); // 至此加密/解密成功
}
// 密码输入以"******"显示
void inputpass(char *pass) {
int i = 0;
char c;
while(isprint(c = getch())) {
pass[i++] = c;
// printf("*");
}
pass[i] = '\0';
printf("\n");
}
参考资料:http://hi.baidu.com/mltong2008/blog/item/653696f0e22337cb7931aafc.html
热心网友
时间:2023-11-11 02:13
简单加密用异或……不过如果不用异或的话
我以前的想法是按位取反,或者是循环左移/右移特定位数
但是还是比较容易破解的
http://www.mouldsky.com/thread-72973-1-1.html
这儿介绍了一点加密方法
另外可以找找其他的专门的加密算法比如rsa,md5或者des
以前做课设的时候考虑过给记录文件加密的问题,但是上面的算法太复杂短时间调试不来就放弃了直接用了异或,囧
pudn上都有的
如果需要源文件可以hi我,我发给你
用C语言给文件加密解密,详细简单的代码;;;用c打开一txt文件,怎么写...
printf("cannot open in-file.\n");exit(1); //如果不能打开要加密的文件,便退出程序、} fp2=fopen(out_file,"wb");if(fp2==NULL){ printf("cannot open or create out-file.\n");exit(1); //如果不能建立加密后的文件,便退出 } while(pwd[++j0]);ch=fgetc(fp1); //加密算...
写一个加密程序,命名为encrypt-学号.c
c语言文件加密和解密方法如下: 1、首先打开VC++6.0; 2、选择文件,新建; 3、选择C++ source file 新建一个空白文档; 4、声明头文件 #include #include #include 首先写个加密函数,算法就是简介里说的; void EncryptFile(FILE *sfp,FILE ...
谁可以给我一个c语言写的DES代码,要求(输入任意一个字符串,可以得到相 ...
unsigned char* outdata,unsigned long* outlen,unsigned char* iv);//加密unsigned char unDES_cbc(unsigned char* indata,unsigned long inlen,unsigned char key[8],\ unsigned char* outdata,unsigned long* outlen,unsigned char* iv);//解密unsigned char enDES(unsigned char* indata,unsigned long in...
...并将结果写入在D盘T.TXT文件,用C语言代码编写
void main(){ int i,a=1,sum=0;FILE *fp;for(i=1;i<11;i++) //求和运算,不用递归比较简单。{ a=i*a;sum=sum+a;} printf("1!+2!+3!+4!+5!+6!+7!+8!+9!+10!= %d \n",sum);if((fp=fopen("D:\T.txt","w"))==NULL) //建立文件t.txt { print...
学C语言编程、文件加密作业中,想用 文件命令 打开指定的 TXT文本,提...
include <stdlib.h> //为了使用exit()int main(){ char ch;FILE* fp;char fname[50]; //用于存放文件名 printf("输入文件名:");scanf("%s",fname);fp=fopen(fname,"r"); //只供读取 if(fp==NULL) //如果失败了 { printf("错误!");exit(1); //中止程序 } //getc()用于在...
如何用c语言删除一个.exe的文件?
可以用linux指令
怎么用c语言对.bin的文件中的内容copy到一个.txt文件中
用二进制的形式把bin文件打开 fopen("XXX.bin", "rb");创建一个txt文件fopen("XXX.txt", "wb");然后读取 bin文件内容 并判断是否为EOF while (fread()!=EOF)将读出的字符串写入新建的txt文档 fwrite 循环结束后 关闭俩文件 fclose ...
21. (1.5分) 下列叙述中正确的是( )。 (A) C语言的预处理功能是
答案是:C A 不对。C语言的预处理功能包括:1.宏定义 2.文件包含 还有3.条件编译 等 B 不对。宏定义和文件包含指令只要在函数代码使用宏或调用包含文件中的变量、函数之前写好,一般在文件首部;但条件编译指令通常在代码中间;其它指令也不需在首部。C 正确。D 不对。C语言的编译预处理内容不...
c语言程序扩展名为.c,它属于A.可执行文件B.目标文件C.文本文件D.库文件...
C 可执行文件是编译链接之后的文件一般是exe结尾,目标文件是编译还没有链接的一般是.o之类的扩展 文本文件我们可以打开来直接看可以理解的 库文件是编译链接之后的另外一种文件,仅含有相关的代码只能被别人调用实现对应功能。
如何给.BAT文件加密
echo 说明: 在下面输入需要加密的批处理文件名 echo.echo 若在此文件的同目录下直接输入“文件名.bat”即可 echo.echo 也可以带路径指定任意BAT echo.echo 加密完成后会在同目录下生成“加密成品.bat”文件 echo.echo.echo.echo.set /p file=请输入需要加密的批处理后(名+后缀)按回车键(...