前言
这阵子交接了一个项目,对方是使用java的工具类,使用3des的方法加密生成了mac值。因为对方提供了java源码,所以我尝试着按照源码逻辑上的步骤一步步实现3des加密。
正文
erlang的crypto模块封装了3des的方法,然而在参数方面,双方发生了分歧。erlang的3des的key的格式必须是 [ Key1, Key2, Key3] 的格式,且必须各自都为 8 位 ,然而 java 实现的时候,密钥是 16位的 byte 数组。这就必须深入到 des 的内部实现方式上去分析了。参考 3des之双倍长密钥和三倍长密钥。
也就是说,3des的实现方式是 des ,解 des,再des,所以需要 24位密钥。 当密钥长度为 16 位时, 分为 左 8 位 leftkey 和右 8 位 rightkey , 三次操作使用的是 leftkey rightkey leftkey。也就是复用了左八位密钥。
网友评论