DES 算法的核心思想是混淆和扩散,我们来看它是怎么做来达到这个目地的。
流程:
密钥置换选择1(pc1) ->密钥循环左移表(rot) ->压缩选排阵(pc2)
初选排阵(ip) ->(扩展选排阵(e) ->S-Box阵(s) ->P选排阵(p)->)*16->末选排阵(fp)
置换使得顺序杂乱无章,密钥循环移位,压缩选排和round()(轮函数)中的扩展选排和S-BOX的替换使得每一位都尽可能的扩散到其它位,达到扩散的目地。
刚开始写时思路不是很清晰,而且对STL中的bitset<_N>的理解只是一知半解,害得我走了好多的弯路,尤其注意这一点,对于位串 bitset<6> b("000001");
b[0]不是0而是1,后来干脆自己写了一个bitset<_N>。
代码:
bitset.h
GetBlockCode.h
GetKeys.h
main.cpp
round.h
StringToBit.h
variable.h
message.in(输入明文)
可自义,只要是文本文件就行!
key.in(输入密钥)
可自定义,但我写的DES算法里只取最前面的8个字符做为密钥,不足补NULL,不影响结果!
绝对原创,希望大家转载时注明出处!