java - 从字节创建 3DES key

标签 java cryptography

我从字节数组(“skBytes”)创建了一个三重 DES key ,但是当对三重 DES key (“sk”)调用 getEncoded 并将其与字节数组进行比较时,它们不同!不过,如果您查看控制台输出,它们几乎是相同的。如何创建与“skBytes”完全相同的三重 DES key ?

    byte[] skBytes = {(byte) 0x41, (byte) 0x0B, (byte) 0xF0, (byte) 0x9B, (byte) 0xBC, (byte) 0x0E, (byte) 0xC9, (byte) 0x4A, (byte) 0xB5, (byte) 0xCE, (byte) 0x0B, (byte) 0xEA, (byte) 0x05, (byte) 0xEF, (byte) 0x52, (byte) 0x31, (byte) 0xD7, (byte) 0xEC, (byte) 0x2E, (byte) 0x75, (byte) 0xC3, (byte) 0x1D, (byte) 0x3E, (byte) 0x61};
    DESedeKeySpec keySpec = new DESedeKeySpec(skBytes);
    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
    SecretKey sk = keyFactory.generateSecret(keySpec);

    for(int i = 0; i < skBytes.length; i++)
    {
        System.out.println("(sk.getEncoded()[i], skBytes[i]) = (" + sk.getEncoded()[i] +", " + skBytes[i] + ")");
    }

控制台输出:

(sk.getEncoded()[i], skBytes[i]) = (64, 65)
(sk.getEncoded()[i], skBytes[i]) = (11, 11)
(sk.getEncoded()[i], skBytes[i]) = (-15, -16)
(sk.getEncoded()[i], skBytes[i]) = (-101, -101)
(sk.getEncoded()[i], skBytes[i]) = (-68, -68)
(sk.getEncoded()[i], skBytes[i]) = (14, 14)
(sk.getEncoded()[i], skBytes[i]) = (-56, -55)
(sk.getEncoded()[i], skBytes[i]) = (74, 74)
(sk.getEncoded()[i], skBytes[i]) = (-75, -75)
(sk.getEncoded()[i], skBytes[i]) = (-50, -50)
(sk.getEncoded()[i], skBytes[i]) = (11, 11)
(sk.getEncoded()[i], skBytes[i]) = (-22, -22)
(sk.getEncoded()[i], skBytes[i]) = (4, 5)
(sk.getEncoded()[i], skBytes[i]) = (-17, -17)
(sk.getEncoded()[i], skBytes[i]) = (82, 82)
(sk.getEncoded()[i], skBytes[i]) = (49, 49)
(sk.getEncoded()[i], skBytes[i]) = (-42, -41)
(sk.getEncoded()[i], skBytes[i]) = (-20, -20)
(sk.getEncoded()[i], skBytes[i]) = (47, 46)
(sk.getEncoded()[i], skBytes[i]) = (117, 117)
(sk.getEncoded()[i], skBytes[i]) = (-62, -61)
(sk.getEncoded()[i], skBytes[i]) = (28, 29)
(sk.getEncoded()[i], skBytes[i]) = (62, 62)
(sk.getEncoded()[i], skBytes[i]) = (97, 97)

最佳答案

DES key 为 56 位,以 8 个字节表示。每个字节携带一个奇偶校验位。三重 DES key 只是将 3 个 DES key 连接在一起。

当您使用 DESedeKeySpec 制作 key 时,它会为您调整奇偶校验。因此,您必须为字节提供适当的奇偶校验才能获得相同的编码值。

关于java - 从字节创建 3DES key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2681292/

相关文章:

java - Google People API - 标准例如有编译错误

c - 使用 HMAC() 函数后释放内存吗?

javascript - 在 C# 中重现 JS PBKDF2 哈希

java - 寻找正确的克隆方法

java - Linux-Nimbus LookAndFeel : Table Grid Lines are not coming

java线程执行顺序

java - 如何使用 aspectj-maven-plugin

c++ - 在 Crypto++ 中使用 Curve25519 签名

java - 计算 Android 中 SHA 迭代的轮次

passwords - 与密码一起存储 PBKDF2 设置