3DES关键组件

时间:2015-01-13 12:12:09

标签: encryption 3des tripledes

我需要使用3DES加密/解密数据。与我分享的密钥是以;

的形式

组件1 = 11111111111111111111111111111111

组件2 = 22222222222222222222222222222222

KVC = ABCD1234

我需要从上面的组件创建3DES Key,或者K1,k2,k3子键,

我理解子密钥长度为16个字节,但这些长度为32个字节。

请分享创建3DES密钥的步骤。

4 个答案:

答案 0 :(得分:3)

使用HexStringToByte标准方法将清除组件转换为字节数组。将3字节数组传递给下面的方法。您可以在http://www.emvlab.org/keyshares/验证结果。以下是示例数据:

  • cc1:447FC2AA6EFFFEE5405A559E88DC958C
  • cc2:1086F0493DB0EFE42EDF1BC99541E96F
  • cc3:D1C603D64D1EDC9D3CA78CD95D168E40
  • 结果键:853F31351E51CD9C5222C28E408BF2A3
  • 结果键kvc:1E49C1
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)

  1. 将十六进制字符串转换为字节数组。 32个字符将为您提供16个字节
  2. 3des需要3个8字节密钥,因此需要24个字节。但是第一和第三键可以是相同的。因此,您需要通过将前8个字节复制到结尾来将数组扩展为24个字节。这个24字节的数组是您可以用于加密和解密的结果密钥。
  3. 否检查密钥 - 使用密钥加密字符串'0000000000000000'(8个零字节或16个零十六进制字符)。编码结果的开头必须等于您的KCV。

答案 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个字符串的十六进制字符)。