XOR算法加密的文件可以破解吗
发布网友
发布时间:2022-04-29 23:29
我来回答
共4个回答
热心网友
时间:2022-06-25 22:36
面来试一下使用穷举法破解以这种方式加密的文件,假设现在有一个怀疑加密了的文件animation.cfg,使用Winhex打开这个文件,如图6-1所示。 (点击查看大图)图6-1 用Winhex打开怀疑加密了的文件animation.cfg观察图6-1中的十六进制数据,以及十六进制数据右边显示的ASCII值,初步推断这个文件存放了UNICODE编码的中国汉字,因为第一行的16个十六进制数据按照UNICODE编码,两个字节解析一个汉字得出"行邽憱挒嫋悜邷悜",但根据文件名"animation.cfg"猜测这是一个动画配置文件,因为"animation"可以翻译为动画,"cfg"多数是"config"的缩写,翻译为配置。那么动画配置文件里面应该存放和动画数据相关的数据才对,怎么会存放中国汉字呢?难道加密了?如果是加密了那么使用了哪种加密方式呢?从最简单的XOR加密入手吧,编写一个程序,这个程序的功能是这样的,读取animation.cfg文件中前16字节的内容,然后使用0~255之间任一个数值和从animation.cfg文件中提取出来的这16个字节(实际可以提取更多字节作比较,这里只提取文件前16字节)作XOR运算,最后将这256组经过XOR运算的数据放在一起作比较,看哪组数据XOR运算后看上去比较有意义而不是垃圾数据。按照上面的思路编写出如下C语言代码:#include<stdio.h>
#include<windows.h>
main()
{
FILE *fp,*fp2;
int i,j; //i用作记录0到255之间任一个数,j用作记录当前XOR的字节位置
byte *buffer,*buffer1,*buffer2,*buffer3;//指针buffer和buffer1一组,制作buffer2
//和buffer3
//一组,buffer指针会变动,buffer制作永远指向
//buffer的第一个字节位置,buffer2和buffer3同样道
//理
buffer =(byte*)malloc(16); //分配16个字节给buffer指向的位置
buffer2 =(byte*)malloc(16*256); //分配16*256个字节给buffer2指向的位置
fp = fopen("animation.cfg", "rb");//打开怀疑加密了的文件
buffer3=buffer2; //buffer3保存buffer2初始时的地址
for (i=0;i<=255;i++)
{
buffer1=buffer; //buffer1保存buffer初始时的地址
fseek(fp, 0, 0); //重定位到animation.cfg文件的开头
fread(buffer1, 16, 1, fp); //读取animation.cfg文件的开头16字节数据到buffer
for(j=0;j<16;j++)
{
*buffer1=*buffer1^i; //animation.cfg文件的开头第一个字节和0~255之间
//任一个数值异或,结果保存在buffer1所指的位置上
*buffer2=*buffer1; //将buffer1所指向的数据复制到buffer2所指的位置
buffer1=buffer1+1; //buffer1指针加1,准备读取下一个数据
buffer2=buffer2+1; //buffer2指针加1,准备存储下一个数据
}
}
fp2 = fopen("test", "wb+"); //打开一个二进制文件,准备将数据写入
fwrite(buffer3, 16*256, 1, fp2);//buffer3保存buffer2初始时的地址,这个语句将
//buffer2初始时的地址所指的数据,用二进制方式写入
//16×256字节
fclose(fp2); //关闭文件句柄
fclose(fp);
}
热心网友
时间:2022-06-25 22:36
可以~XOR规则有点太简单了~
热心网友
时间:2022-06-25 22:37
xor有一个特性
1,a^key = b, a与key异或得到b
2,b^key =a,b与key再次异或又得到了a
所以能够破解的关键在于别人能不能获得你的key
热心网友
时间:2022-06-25 22:37
如果你不把密码内置在加密后的文件中,那xor算法是不能解密的,用任何密码都可以进行逆操作。
上面那么多人说能破解,你们给个破解方法出来?难道用统计?
搞安全的那个,按理说你们应该清楚点,你说能你能给个方法出来么?
我如果用密钥文件作为依据进行加密呢?
不知道的请说不知道。(包括搞安全的)