您的位置:首页 > 其它

搜狗在线测评(加密解密)

2011-12-04 20:33 169 查看
#include  <stdio.h>
#include  <stdlib.h>
//#include  <stdint.h>
#include  <assert.h>
#include  <string.h>

typedef unsigned char uint8_t;
typedef unsigned int uint32_t;

int  encode(const  void*  raw_in,  void*  raw_out,  uint32_t  password,  size_t  len)
{
const  uint8_t*  in  =  (const  uint8_t*)raw_in;
uint8_t*  out  =  (uint8_t*)raw_out;

uint32_t  seed  =  password  ^  0xbf9c7264u;
for  (size_t  i  =  0  ;  i  <  len;  ++i)  {
uint8_t  a  =  (  in[i]  ^  seed  )  >>  5;
uint8_t  b  =  (  (  ((uint32_t)in[i])  <<  15  )  ^  seed  )  >>  (15-3);
a  &=  7;
b  &=  248;
a  =  7  &  (  a  ^  (b  <<  3));
out[i]  =  a  |  b;
seed  =  ((seed  ^  out[i])  *  129491  +  out[i]);
}

return 0;
}

int  decode(const  void*  raw_in,  void*  raw_out,  uint32_t  password,  size_t  len)
{
const  uint8_t*  in  =  (const  uint8_t*)raw_in;
uint8_t*  out  =  (uint8_t*)raw_out;

uint32_t  seed  =  password  ^  0xbf9c7264u;
for  (size_t  i  =  0  ;  i  <  len;  ++i)  {
//  请在此处补全代码
//out[i]  =  a  |  b;
uint8_t a = ( in[i] & 7);
uint8_t b = ( in[i] & 248);

//a  =  7  &  (  a  ^  (b  <<  3));
a = (a  ^  (b  <<  3));
a = (a << 5) ^ seed;

//uint8_t  b  =  (  (  ((uint32_t)in[i])  <<  15  )  ^  seed  )  >>  (15-3);
b = ((((uint32_t)b<<12))^seed )>>15;

//uint8_t  a  =  (  in[i]  ^  seed  )  >>  1;
a = a & 0xe0;//高3位
b = b & 0x1f;//低5位

out[i]  =  a  |  b;

seed  =  ((seed  ^  in[i])  *  129491  +  in[i]);
}
return 0;
}
int  main()
{
const  uint8_t  buf1[]  =  {0x0b,  0xf1,  0x3f,  0x87,  0xd2,  0xa4,  0x08,  0xb9,  0x28,  0x2d,  0x3c,  0xd9,  0x9a,  0xec,  0x3b,  0xe9,  0x42,  0xa5,  0xea,  0x2b,  0xa9,  0x7b,  0xe3,  0x45,  0xd3,  0x45,  0x64,  0x16,  0x66,  0x42,  0xff,  0x5b,  0xb6,  0xe3,  0x7a,  0x6d,  0x7e,  0x6d,  0x5a,  0xf1,  0xa1,  0x5b,  0x5b,  0x71,  0x27,  0x5c,  0xb9,  0x30,  0x55,  0x0b  };
uint8_t  buf2[100]  =  {0};
const  uint32_t  password  =  0xc67911cfu;
const  size_t  len  =  sizeof(buf1);
decode(buf1,  buf2,  password,  len);
printf("%s\n",  buf2);

return 1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: