最初由 wenglingok 发布
F_En( )是作者自己设计的一个加密算法。
........
那个加密是标准的RC6算法
#define rotr(x,n) _lrotr(x,n)
#define rotl(x,n) _lrotl(x,n)
#endif
#define f_rnd(i,a,b,c,d) \
t = rotl(b * (b + b + 1), 5); \
u = rotl(d * (d + d + 1), 5); \
a = rotl(a ^ t, u & 0x0000001f) + l_key[i]; \
c = rotl(c ^ u, t & 0x0000001f) + l_key[i + 1] \
#define i_rnd(i,a,b,c,d) \
u = rotl(d * (d + d + 1), 5); \
t = rotl(b * (b + b + 1), 5); \
c = rotr(c - l_key[i + 1], t & 0x0000001f) ^ u; \
a = rotr(a - l_key[i], u & 0x0000001f) ^ t \
/* encrypt a block of text */
void rc6encrypt(unsigned long in_blk[], unsigned long out_blk[], unsigned long l_key[44])
{ unsigned long a,b,c,d,t,u;
a = in_blk[0]; b = in_blk[1] + l_key[0];
c = in_blk[2]; d = in_blk[3] + l_key[1];
f_rnd( 2,a,b,c,d); f_rnd( 4,b,c,d,a);
f_rnd( 6,c,d,a,b); f_rnd( 8,d,a,b,c);
f_rnd(10,a,b,c,d); f_rnd(12,b,c,d,a);
f_rnd(14,c,d,a,b); f_rnd(16,d,a,b,c);
f_rnd(18,a,b,c,d); f_rnd(20,b,c,d,a);
f_rnd(22,c,d,a,b); f_rnd(24,d,a,b,c);
f_rnd(26,a,b,c,d); f_rnd(28,b,c,d,a);
f_rnd(30,c,d,a,b); f_rnd(32,d,a,b,c);
f_rnd(34,a,b,c,d); f_rnd(36,b,c,d,a);
f_rnd(38,c,d,a,b); f_rnd(40,d,a,b,c);
out_blk[0] = a + l_key[42]; out_blk[1] = b;
out_blk[2] = c + l_key[43]; out_blk[3] = d;
};
用户名->MD5->RC6加密->和注册码比较
佩服LZ的分析能力
RC6的特征:
初始化密钥是有0xb7e15163, 0x9e3779b9
子密钥DWORDkey[44] 共176字节长 最大特征了
20轮
加密解密过程常有左移5位 和 & 1F