zoukankan      html  css  js  c++  java
  • [转]单倍长密钥加密和双倍长密钥加密,银联直联终端62域难点详解

    说明不清楚的文档,真是害死人了。

    -------------------------------------------

    首先来看一段文字:
    ——————————————————–
    银联直联终端测试中,在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)

    双倍长密钥算法为:

    1. str = DES(str ,k21)
    2. str = UDES(str ,k22)
    3. str = DES(str ,k21)

    其对应的解密过程就不详解了。

    那么坑爹的checkvalue又是什么呢?

    val = DES(‘00000000’ ,k1)

    checkvalue为val的前4位。

  • 相关阅读:
    HDU_5688
    微服务的一致性问题
    我来博客园啦
    异常:This application has no explicit mapping for /error, so you are seeing this as a fallback.
    异常:Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException
    异常:Unknown lifecycle phase "mvn". You must specify a valid lifecycle
    SpringMVC中遇到页面跳转出现404错误的问题
    Could not resolve view with name '***' in servlet with name 'dispatcher'
    关于Could not resolve dependencies for project
    让我们相互交流
  • 原文地址:https://www.cnblogs.com/qkhh/p/3653138.html
Copyright © 2011-2022 走看看