该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include
#include
#include
#include
#include
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;
size_t i;
uint32_t seed = password ^ 0x31dbd86u;
for(i = 0 ; i < len; ++i)
{
uint8_t a = ( in[i] ^ seed ) >> 1;
uint8_t b = ( ( ((uint32_t)in[i]) << 17 ) ^ seed ) >> (17-7);
a &= 127;
b &= 128;
a = 127 & ( a ^ (b << 3));
out[i] = a | b;
seed = ((seed ^ in[i]) * 1792013 + in[i]);
}
}
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 ^ 0x31dbd86u;
for (size_t i = 0 ; i < len; ++i) {
// 请在此处补全代码
}
}
int main()
{
const uint8_t buf1[] = {0x80, 0x04, 0x7f, 0x0d, 0xf9, 0x40, 0x7e,
0x26, 0x2d, 0xd7, 0x8b, 0x85, 0x61, 0x36, 0xd9, 0x09, 0x08, 0x8b,
0x2e, 0xc8, 0x47, 0x6b, 0x3b, 0x83, 0xdb, 0x62, 0x87, 0x5d, 0x47,
0x95, 0x61, 0x39, 0x99, 0xfb, 0xf0, 0x7c, 0xeb, 0x17, 0xd3, 0xdf,
0xfb, 0xc7, };
uint8_t buf2[100] = {};
const uint32_t password = 0x7a89be4cu;
const size_t len = sizeof(buf1);
decode(buf1, buf2, password, len);
printf("%s\n", buf2);
}