如何用C语言对文件进行加密和解密?

如何用C语言对文件进行加密和解密?,第1张

对于加密要求不高的完全可以自己定义规则来进行加密。这种加密是很简单很自由的,例如你在存文件的时候可以将文件中的每个字符都加上一个数,然后读取该文件的时候再每个字符相应地减去那个数,即可实现就简单的加密,这样你储存的文件看上去就是乱码了。只是这个规则太简单,规则你可以自己定,加密与解密对着来就行了。

下面程序用异或 *** 作对文件进行加密和解密

/******************设计思路******************/

//根据用户输入的加密/机密密码

//每次都拿原文件和密码等长度的一个字符串和密码

//对应元素异或进行加密/解密

//另外因为是用异或方法,所以加密和解密就是同一个程序

//即按照同样的加密即是对文件的解密

#include

#include

#include

#include

#include

charfilename[256]//原文件

charpassword[256]//加密/解密密码

constcharfilenametemp[]="temp15435255435325432543.temp"//加密/解密中间文件

voidinputpass(char*pass)//密码输入以"******"显示

voidmain(){

FILE*fp//加密/解密的文件

FILE*fptemp//加密/解密过程临时文件

intpwdlen//密码长度

inti=0//计数器

charch=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")//至此加密/解密成功

}

//密码输入以"******"显示

voidinputpass(char*pass){

inti=0

charc

while(isprint(c=getch())){

pass[i++]=c

//printf("*")

}

pass[i]='\0'

printf("\n")

}

你的92是怎么得到523的?

/*解密的过程就是加密的逆过程,你加密的过程是:

1. 每位数都加7并对10进行取余

2. 第一位和第三位进行调换

那么解密的过程就可以是这样:

1. 第一位和第三位进行调换(现在就重新回到了原来的位置)

2. 每位数都减7并对10进行取余

可是,这里有一个问题:如果这位上的数小于7怎么办。解决方案是先加10再减7,最后的结果就是加3然后对10取余

*/

#include <stdio.h>

int jiemi(int m)

{

int i, j, a, s

s = 0

while(m)

{

a = m%10 //取出最后一位

s = s*10 + (a+3)%10

m /= 10

}

return s

}

int main()

{

int n

while(scanf("%d", &n)==1)

{

printf("%d 解密后: %d\n", n, jiemi(n))

}

return 0

}

文件分为文本文件和二进制文件。加密方法也略有不同。

1、文本文件

加密的主要是文本的内容,最简单的方法就是修改文档的内容,比如1.txt中的文件内容:

abcd

只要给每一个字符+1,就可以实现加密。文件内容即会变为

bcde

2、二进制文件加密

二进制文件加密也就是对应用程序加密,需要理解可执行文件格式,比如Windows平台的Exe文件它是PE结构,Linux上的可执行文件是ELF结构,要对这样的程序进行加密,实际上是开发一种叫做“壳”的程序,这种程序的开发,需要将扎实的底层基础,同时也需要对软件加密解密有细致的理解,比如流行的vmprotect、z壳以及早些年的upx壳、aspack等等。

3、无论哪种加密都牵涉到文件 *** 作的问题,使用C语言进行文件 *** 作时,极少使用C标准库中的I/O函数,大多数使用 *** 作系统提供的内存文件映射相关的API函数,有兴趣,可以搜索相关的资料。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8176016.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存