#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;}