搜狗的在线测评

做了两次,有木有搞错!!!,汗!!!

本着分享的精神,哥决定把code blog一下下

#include  <stdio.h>
#include  <stdlib.h>

#include  <assert.h>
#include  <string.h>
#define uint8_t unsigned char 
#define uint32_t unsigned int 
#define size_t unsigned int

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  ^  0xca3369d3u;
	for  (size_t  i  =  0  ;  i  <  len;  ++i)  {
		uint8_t  a  =  (  in[i]  ^  seed  )  >>  5;
		uint8_t  b  =  (  (  ((uint32_t)in[i])  <<  10  )  ^  seed  )  >>  (10-3);
		a  &=  7;
		b  &=  248;
		a  =  7  &  (  a  ^  (b  <<  3));
		out[i]  =  a  |  b;
		seed  =  ((seed  ^  out[i])  *  608347  +  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  ^  0xca3369d3u;
	for  (size_t  i  =  0  ;  i  <  len;  ++i)  {
		 
		uint8_t a = 7 & in[i];
		uint8_t b = 248 & in[i]; 	

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


		b = 31 & ( ( ( ((uint32_t)b )<<7) ^seed) >> 10); 

		out[i]  =  a  |  b; 

		seed  =  ((seed  ^  in[i])  *  608347  +  in[i]);
	}

	return 0;
}
int  main()
{
	const  uint8_t  buf1[]  =  {0xe8,  0xd8,  0x44,  0x06,  0xd2,  0xf8,  0xf0,  0xb5,  0xb6,  0xf0,  0xb6,  0x8e,  0xa7,  0xa3,  0x9f,  0xba,  0x57,  0x25,  0x9c,  0x76,  0x31,  0x19,  0x23,  0x44,  0x68,  0xf8,  0x38,  0x99,  0x17,  0x9f,  0xc3,  0x58,  0x5f,  0xe3,  };
	uint8_t  buf2[100]  =  {};
	const  uint32_t  password  =  0xabd0b01cu;
	const  size_t  len  =  sizeof(buf1);
	decode(buf1,  buf2,  password,  len);
	printf("%s\n",  buf2);
}

#include  <stdio.h> 
#include  <stdlib.h> 
#include  <assert.h> 
#include  <string.h> 

#define uint8_t unsigned char 
#define uint32_t unsigned int 
#define size_t unsigned int 

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  ^  0x7bece1afu; 
	for  (size_t  i  =  0  ;  i  <  len;  ++i)  { 
		uint8_t  a  =  (  in[i]  ^  seed  )  >>  1; 
		uint8_t  b  =  (  (  ((uint32_t)in[i])  <<  18  )  ^  seed  )  >>  (18-7); 
		a  &=  127; 
		b  &=  128; 
		a  =  127  &  (  a  ^  (b  <<  3)); 
		out[i]  =  a  |  b; 
		seed  =  (seed  *  48475829  ^  seed  ^  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  ^  0x7bece1afu; 
	for  (size_t  i  =  0  ;  i  <  len;  ++i)  { 

		uint8_t a = 127 & in[i];
		uint8_t b = 128 & in[i]; 	

		//a  =  127  &  (  a  ^  (b  <<  3)); 
		a = 254 & (( a <<1) ^ seed); 

		
		b = 1 & ( ( ( ((uint32_t)b )<< 11) ^seed) >> 18); 

		out[i]  =  a  |  b; 

		seed  =  (seed  *  48475829  ^  seed  ^  in[i]); 

	} 
	return 0;
} 
int  main() 
{ 
	const  uint8_t  buf1[]  =  {0x21,  0xd3,  0xee,  0xed,  0xac,  0xee,  0x6d,  0x8b,  0xe6,  0xe1,  0xf8,  0xcd,  0x98,  0x9c,  0xc5,  0xcc,  0x25,  0x7a,  0xde,  0x98,  0x8f,  0xd2,  0xc6,  0x21,  0xf5,  0x40,  0xcb,  0xcd,  }; 
	
	uint8_t  buf2[100]  =  {}; 
	const  uint32_t  password  =  0x5b7b8638u; 
	const  size_t  len  =  sizeof(buf1); 
	decode(buf1,  buf2,  password,  len); 

	printf("%s\n",  buf2); 
} 


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值