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

来源:互联网 发布:被男友强啪的经验知乎 编辑:程序博客网 时间:2024/04/29 11:55
#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;} 



原创粉丝点击