gpt4 book ai didi

Java - 将字符串转换为 DES key

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:36:49 26 4
gpt4 key购买 nike

我得到了一个字符串形式的 key 和一个使用 DES 加密的文件。这是我所知道的。我不知道 key 是如何编码的。

还有一个des.exe可以用来解密,这是我在网上找到的:http://knowledge-republic.com/CRM/2011/07/how-to-decrypt-extract-recreate-thecus-storage-firmware/

使用 des.exe,它使用的唯一命令是“-D”,而不是“-d”。

我的目标是使用 Java 来做同样的事情。我从某处复制并粘贴了这个

    String key = "blah";
DESKeySpec dks = new DESKeySpec(key.getBytes());
SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");
SecretKey desKey = skf.generateSecret(dks);
System.out.println(desKey);

Cipher cipher = Cipher.getInstance("DES"); // DES/ECB/PKCS5Padding for SunJCE

if (mode == Cipher.DECRYPT_MODE) {
cipher.init(Cipher.DECRYPT_MODE, desKey);
CipherOutputStream cos = new CipherOutputStream(os, cipher);
doCopy(is, cos);
}

而且它不起作用。

将字符串转换为键还有哪些其他选项?

可能应该补充一下,我是密码学的新手。

最佳答案

des 的 SunOS 手册页(这似乎是您的 des.exe 所基于的?)表示它们的 key 是这样生成的:

The DES algorithm requires an 8 byte key whose low order bits are assumed to be odd-parity bits. The ASCII key supplied by the user is zero padded to 8 bytes and the high order bits are set to be odd-parity bits. The DES algorithm then ignores the low bit of each ASCII character, but that bit's information has been preserved in the high bit due to the parity.

它还提到初始 IV 总是归零,无论您在何种模式下运行

The CBC mode of operation always uses an initial value of all zeros for the initialization vector, so the first 8 bytes of a file are encrypted the same whether in CBC or ECB mode.

它还提到使用的填充使得最后一个字节始终是 0-7 之间的值,指示使用的填充字节数。这类似于 PKCS5Padding,所以也许这会起作用

Since the CBC and ECB modes of DES require units of 8 bytes to be encrypted, files being encrypted by the des command have 1 to 8 bytes appended to them to cause them to be a multiple of 8 bytes. The last byte, when decrypted, gives the number of bytes (0 to 7) which are to be saved of the last 8 bytes. The other bytes of those appended to the input are randomized before encryption.

根据您表示正在使用的选项,听起来您正在使用 DES/CBC/PKCS5Padding 作为密码。

我认为剩下的就是确定如何实际派生 key 。我在 exampledepot 上找到了这个示例代码这可能对你有用。我认为您只需要将字符串密码转换为 8 个字节(每个字符 1 个字节,因此没有 UTF 编码),然后将其填充到示例中的代码中以导出 key 。无论如何都值得一试。

关于Java - 将字符串转换为 DES key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7020945/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com