TR-31版本B密钥块明文密钥提取失败,寻求技术帮助
TR-31解密实现问题排查建议
关键数据整理
KBPK: 33333333333333334444444444444444 TR-31 Key block: B0080P0TD00S00003A74E0769701C712CC87ECB93E9455CC2BF16C71B30F507E524F535F42B56027 TR-31 Header: B0080P0TD00S0000 TR-31 Encrypted key: 3A74E0769701C712CC87ECB93E9455CC2BF16C71B30F507E TR-31 MAC: 524F535F42B56027 Plain Key: 94892FF715E992BC4AC4E56116582AE6
核心错误点排查
- KBEK生成规则错误
TR-31规范中,KBEK是通过KBPK对固定ASCII字符串TR-31 KBEK计算3DES CMAC得到的16字节密钥,而非基于Header或加密密钥数据。
- 验证方式:用在线3DES CMAC工具,输入KBPK(十六进制)和字符串
TR-31 KBEK(ASCII),确认生成的KBEK是否正确。错误的KBEK会直接导致解密失败。
解密IV使用错误
当前使用TR-31 MAC作为CBC模式的IV不符合TR-31规范,正确做法是使用**全0字节数组(16字节0x00)**作为IV进行3DES CBC解密。3DES模式与密钥格式验证
确保使用**3DES EDE(加密-解密-加密)**模式,KBEK为双长度3DES密钥(16字节),注意处理密钥的奇偶校验位(部分库会自动处理,需确认实现是否兼容)。MAC验证前置步骤(可选但关键)
解密前建议先验证MAC,确保密钥块未被篡改:
- 用KBPK对固定ASCII字符串
TR-31 KBMK计算CMAC得到KBMK; - 用KBMK对
Header + Encrypted Key的十六进制数据计算CMAC,取最后8字节与提供的MAC对比,一致则数据有效。
验证步骤示例
- 生成KBEK:KBPK=33333333333333334444444444444444 → CMAC(
TR-31 KBEK) → 得到正确KBEK; - 3DES CBC解密:IV=全0,密钥=KBEK,密文=3A74E0769701C712CC87ECB93E9455CC2BF16C71B30F507E → 解密结果应匹配明文密钥94892FF715E992BC4AC4E56116582AE6。
若仍失败,检查代码中十六进制字符串与字节数组的转换逻辑(如字节序、奇偶校验位处理)。
内容的提问来源于stack exchange,提问作者etna
相关产品推荐
相关产品推荐

