gpt4 book ai didi

java - 使用 Cipher 解密我的消息时出错

转载 作者:行者123 更新时间:2023-12-02 13:40:09 26 4
gpt4 key购买 nike

我正在使用this code .

当所有代码都在 main 方法中的一个 try catch 中时,它似乎可以工作,但当它被分成另一个类并通过 Security 对象调用解密时,它就不起作用了。

我猜类没有正确初始化。

错误:

­¬Uˆ±‡Qœò|À'Zâ\\SEPERATION\\ javax.crypto.IllegalBlockSizeException: Input length must be multiple of 8 when decrypting with padded cipher at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:934) at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:845) at com.sun.crypto.provider.DESCipher.engineDoFinal(DESCipher.java:314) at javax.crypto.Cipher.doFinal(Cipher.java:2165) at Security.decrypt(Security.java:62) at EncryptAndDecrypt.main(EncryptAndDecrypt.java:15) null

最佳答案

这可能是编码/解码过程的问题。您将 DES 加密的密文存储到 String 对象中,而不是首先将 cipher.doFinal() 的原始字节输出编码为可靠的编码方案(例如 Base64 或十六进制)。 DES 加密将导致每个字节包含范围在 0x000xFF (0 - 255) 之间的值,但您随后可以将此输出存储到String(实际上未指定字符编码;可能是 US-ASCIIUTF-8 或类似编码,但这取决于平台可以通过 Charset.defaultCharset() 确定)。将未编码的字节存储到 String 中的问题在于,在 Unicode、ASCII 等中,并非 0x00 - 0xFF 中的每个值都是保证是一个有效的字符。它可能是一个控制序列、未定义的等等。

因此,首先将密文编码为十六进制或Base64,然后将其存储为字符串。解密时,反转编码(即解码),然后执行解密。

关于java - 使用 Cipher 解密我的消息时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42778705/

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