gpt4 book ai didi

Java DES 错误加密

转载 作者:行者123 更新时间:2023-12-02 03:17:39 25 4
gpt4 key购买 nike

我已经使用内置库在 Java 中编码了 DES,但我没有得到正确的加密结果。请解释一下我在哪里犯了错误

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.xml.bind.DatatypeConverter;

public class MainClass {

public static void main(String[] args) {

String l = "0e329232ea6d0d73";

byte[] a = DatatypeConverter.parseHexBinary(l);

try{
DESKeySpec dks = new DESKeySpec(a);
SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");
SecretKey sk = skf.generateSecret(dks);
Cipher c = Cipher.getInstance("DES");
c.init(Cipher.ENCRYPT_MODE, sk);
String M = "8787878787878787";
byte[] b = c.doFinal(M.getBytes());

System.out.println(new String(b));
c.init(Cipher.DECRYPT_MODE, sk);
System.out.println(new String(c.doFinal(b)));
}
catch(Exception e)

{
System.out.println(e.getMessage());
}
}

}

十六进制 16 位 key :0e329232ea6d0d73
纯文本:8787878787878787
加密:–m^MúÊ'+–m^MúÊ'+©ôËÓ—

所需加密:0000000000000000

这就是我所说的在线计算器加密输出中的答案是0000,和我的完全不同:

Image

最佳答案

改变

byte[] b = c.doFinal(M.getBytes());

byte[] b = c.doFinal(DatatypeConverter.parseHexBinary(M));

此外,在代码中使用 ECB 模式(因为您在图片中标记了 ECB)。喜欢:

Cipher c = Cipher.getInstance("DES/ECB/NoPadding");

String.getBytes()使用平台的默认字符集将 String 编码为字节序列,并将结果存储到新的字节数组中。在您的情况下,这是一个长度为 16 的数组,其中包含值 56 55 56 55... ASCII 8787...

的表示

您需要的是将十六进制 8787... 转换为二进制。

关于Java DES 错误加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40065197/

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