高手帮忙看看算法逆反

来源:百度知道 编辑:UC知道 时间:2024/06/07 22:25:48
for (i = 0; i < size; i++) buf[i] = ((buf[i] ^ ((i+128) & 0xD5)) * 257) >> (i & 7);
这个是完整代码,求还原代码

int do_jiami(string file)
{
int size, i;
switch (file[<2..<1]) {
case ".c":
case ".h":
break;
default:
return -4;
}
if (file_size(file) < 0) return -3;
buf = read_buffer(file);
size = sizeof(buf);
if (!size) return -2;
if (buf[0] & 0x80) return -1;
for (i = 0; i < size; i++) buf[i] = ((buf[i] ^ ((i+128) & 0xD5)) * 257) >> (i & 7);
write_buffer(file, 0, buf);
buf = read_buffer(file);
size = sizeof(buf);
if (buf[0] & 0x80) return 1;
return 0;
}

谢谢三楼

加密rrr后解密成为 €€? 好像不对

//加密时,移位有损,没办法。
//加密方法有错。
#include<iostream>
using namespace std;

int main()
{

int size=3;
int buf[100];
buf[0]='r';//'r'的ASCII是114
buf[1]='r';
buf[2]='r';

for (int itt=0;itt<size;itt++)
{
printf("%d\n",buf[itt]);
}
printf("*****************\n");

int i;
for (i = 0; i < size; i++)
buf[i] = ((buf[i] ^ ((i+128) & 0xD5)) * 257) >> (i & 7);//加密

for (int itt=0;itt<size;itt++)
{
printf("%d\n",buf[itt]);
}
printf("*****************\n");

for (i = 0; i < size; i++)
buf[i] =( (buf[i]<<(i&7))/257 )^( ((i+128) & 0xD5) );//解密

for (int itt1=0;itt1<size;itt1++)
{
printf("%d\n",buf[itt1]);
}
return 0;
}

for 开始
1: (i+128)
2: 1的值&0xD5