说明不清楚的文档,真是害死人了。
-------------------------------------------
首先来看一段文字:
——————————————————–
银联直联终端测试中,在POS终端签到的应答报文中,62域是如何规定的?
62域长度应为24或40个字节。对于单倍长密钥算法:前12个字节为PIN的工作密钥的密文,后12个字节为MAC的工作密钥的密文。(其中,前8个字
节是密文,后4个字节是checkvalue;用前8个字节解出的明文做key,对8个字节00做单倍长密钥算法,取结果的前四位与checkvalue
的值比较应该是一致的)。
对于双倍长密钥算法:前20个字节为PIN的工作密钥的密文,后20个字节为MAC的工作密钥的密文。(其中,“PIN工作密钥”前16个字节是密文,后
4个字节是checkvalue;用前16个字节解出明文做key,对8个字节00做双倍长密钥算法,取结果的前四位与checkvalue
的值比较应该是一致的;“MAC工作密钥”前8个字节是密文,再8个字节是二进制零,后4个字节是checkvalue;用前8个字节解出明文做key,
对8个字节00做单倍长密钥算法,取结果的前四位与checkvalue 的值比较应该是一致的)。
———————————————————
这个坑爹的单倍长密钥算法和双倍长密钥算法。以及checkvalue让我查了好几天才搞清楚究竟什么回事。现在发出来让有同样困惑的同志了解下。
首先,单倍长密钥算法,和双倍长密钥算法,在这里分别是DES算法的DES算法和3DES加密算法。
其中由于密钥为16字节64位,32字节128位所以称为单倍长密钥和双倍长密钥算法,相应的还有三倍长密钥算法。
单倍长密钥为k1 双倍长密钥为k2拆分为前后两部分k2=k21+k22。假设des算法写作DES,解密算法写作UDES
单倍长密钥算法为:str = DES(str ,k1)
双倍长密钥算法为:
- str = DES(str ,k21)
- str = UDES(str ,k22)
- str = DES(str ,k21)
其对应的解密过程就不详解了。
那么坑爹的checkvalue又是什么呢?
val = DES(‘00000000’ ,k1)
checkvalue为val的前4位。