使用 des ede、javax.crypto.badpaddingexception 的解密错误

发布于 2024-11-27 03:14:45 字数 722 浏览 2 评论 0原文

我的代码中存在一个错误,它无法让我正确解密! 我只将八个字节的数据传递给 dataBytes 并且我正在传递 keyBytes 的 24 字节密钥。 我试图将解密的数据作为字节数组返回。 我不断收到错误的填充异常。

谢谢!

这是代码片段:

private static byte[] DESEdeDecrypt(byte[] keyBytes, byte[] dataBytes){

    byte[] decryptedData = null;
    try{
        DESedeKeySpec keySpec = new DESedeKeySpec(keyBytes, 0); 
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
        SecretKey key = keyFactory.generateSecret(keySpec); 
        Cipher cipher = Cipher.getInstance("DESede");
        cipher.init(Cipher.DECRYPT_MODE, key);
        decryptedData = cipher.doFinal(dataBytes);
    }
    catch(Exception e){System.out.println(e);}  

    return decryptedData;

I've been stuck on a bug in my code, it will not let me decrypt properly!
I am only passing eight bytes of data to dataBytes and I am passing
a 24 byte key to keyBytes.
I am trying to return the decrypted data as an array of bytes.
I keep getting the bad padding exception.

Thanks!

Here is the code snippet:

private static byte[] DESEdeDecrypt(byte[] keyBytes, byte[] dataBytes){

    byte[] decryptedData = null;
    try{
        DESedeKeySpec keySpec = new DESedeKeySpec(keyBytes, 0); 
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
        SecretKey key = keyFactory.generateSecret(keySpec); 
        Cipher cipher = Cipher.getInstance("DESede");
        cipher.init(Cipher.DECRYPT_MODE, key);
        decryptedData = cipher.doFinal(dataBytes);
    }
    catch(Exception e){System.out.println(e);}  

    return decryptedData;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

白色秋天 2024-12-04 03:14:45

您必须使用与加密相同的填充来解密。最好明确地设置它而不是依赖默认值。最好也指定两端的模式:

Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");

DESede 速度慢且过时。除了与旧代码兼容之外,您不应该使用它。对于新工作,最好使用 AES。

You must use the same padding to decrypt as you did to encrypt. It is better to set it explicitly rather than to rely on defaults. Best also to specify the mode at both ends as well:

Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");

DESede is slow and obsolescent. You shouldn't use it except for compatibility with old code. For new work it is better to use AES.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文