我需要使用3DES加密/解密数据。与我分享的密钥是以;
的形式组件1 = 11111111111111111111111111111111
组件2 = 22222222222222222222222222222222
KVC = ABCD1234
我需要从上面的组件创建3DES Key,或者K1,k2,k3子键,
我理解子密钥长度为16个字节,但这些长度为32个字节。
请分享创建3DES密钥的步骤。
答案 0 :(得分:3)
使用HexStringToByte标准方法将清除组件转换为字节数组。将3字节数组传递给下面的方法。您可以在http://www.emvlab.org/keyshares/验证结果。以下是示例数据:
public static byte[] buildKey(byte[] cc1, byte[] cc2, byte[] cc3) {
byte[] result = new byte[cc1.length];
int i = 0;
for (byte b1: cc1) {
byte b2 = cc2[i];
byte b3 = cc3[i];
result[i] = (byte)(b1 ^ b2 ^ b3);
i++;
}
return result;
}
答案 1 :(得分:1)
答案 2 :(得分:0)
我遇到了同样的问题。 继续上面的示例,您有两个关键组件:
组件1 = 11111111111111111111111111111111
组件2 = 22222222222222222222222222222222
你必须添加第三个组件,因为你没有它,它将是零
组件3 = 00000000000000000000000000000000
现在使用@Slav提供的方法,这将为您提供真正的主密钥。
byte[] masterKey = buildKey (component1, component2, component3) ; remember those values has to be in hexa.
现在让我们假设您有一个加密值,您将按如下方式对其进行解密:
byte[] plainValue = tripleDESDecrypt (encryptedValue, masterKey);
如果您需要更多详细信息,请与我联系发送java文件。
答案 3 :(得分:-1)
只需使用EFT计算器,可通过以下链接下载: https://eftcalculator.codeplex.com/ 只需对您拥有的所有组件进行异或,您将获得3DES密钥。要验证结果,只需加密&00; 0000000000000000'使用相同的计算器和生成的XORed键。您将获得密钥检查值(KCV)作为结果。
HEX字符串表示中有32个字节长的3DES密钥。将此字符串压缩为字节将为您提供16个字节(1个字节== 2个字符串的十六进制字符)。