自己想实现DES,参考了一下OpenSSL的源代码,却发现代码是如此的难懂,看得真是郁闷~~~~~~~
连第一步初始IP置换都没看明白,想请高手指教一下
- #define PERM_OP(a,b,t,n,m) ((t)=((((a)>>(n))^(b))&(m)),\
- (b)^=(t),\
- (a)^=((t)<<(n)))
- #define IP(l,r) \
- { \
- register DES_LONG tt; \
- PERM_OP(r,l,tt, 4,0x0f0f0f0fL); \
- PERM_OP(l,r,tt,16,0x0000ffffL); \
- PERM_OP(r,l,tt, 2,0x33333333L); \
- PERM_OP(l,r,tt, 8,0x00ff00ffL); \
- PERM_OP(r,l,tt, 1,0x55555555L); \
- }
复制代码
还好原作者写了个注释,说是这是个几何问题,说下面的代码可以在DES的两个word之间交换bit,他还举了个例子,例子是看明白了(例子中居然还有个小错误!!郁闷!!)
- t=((l>>size)^r)&(mask);
- r^=t;
- l^=(t<<size);
复制代码
但是最后DES的初始置换的代码还是没弄明白~~~ |