【问题标题】:BadPaddingException: Decryption error when trying to decrypt a byte array?BadPaddingException:尝试解密字节数组时出现解密错误?
【发布时间】:2017-10-29 13:36:05
【问题描述】:
public static String decrypt(byte[] text, PrivateKey key) {
    byte[] decryptedText = null;
    try {
        final Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.DECRYPT_MODE, key);
        decryptedText = cipher.doFinal(text);
    } catch (Exception e) {
        e.printStackTrace();
    }

    return new String(decryptedText);
}

有我的代码,由于某种原因,我收到此错误,我认为这与使用 Cipher 类的默认构造函数有关。

为什么会出现这个错误?

【问题讨论】:

  • BadPaddingException 通常表示密码错误。
  • @dpr “密码错误”是什么意思?我正在为一个学校项目尝试一些套接字、服务器-> 客户端消息传递加密。
  • “我认为这与使用 Cipher 类的默认构造函数有关。” 你 不要'不使用任何构造函数,尤其是不使用默认构造函数(该类无论如何都没有)。
  • 这个问题中缺少大量可能相关的信息。您如何对其进行加密,如何对加密结果进行编码和传输,在尝试解密之前如何接收和解码? Cipher.getInstance("RSA"); 使用平台默认值,这是错误的常见来源。所以这就引出了加密平台是否不同于解密平台的问题。与new String(decryptedText); 相同
  • 欢迎来到 Stack Overflow!填充错误可能意味着很多事情:错误的密钥、错误的编码、不完整/过满的密文。您应该显示加密代码并给出您使用的示例值。否则,很容易猜测此代码(或加密代码)可能有什么问题。总之,请创建一个Minimal, Complete, and Verifiable example。

标签: java encryption rsa badpaddingexception


【解决方案1】:

为了得到合理的结果,你通常不想加密一个任意个字节。

改为:放大使用填充加密的字节数。

请参阅here“为什么要垫?”

【讨论】:

  • 现在阅读。那么,填充可以解决我的问题吗?
  • 好吧。实际上你想建立一个minimal reproducible example - 比如:你将什么样的数据传递给那个方法?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-04
  • 1970-01-01
  • 1970-01-01
  • 2015-11-03
  • 1970-01-01
  • 2018-09-15
  • 2023-04-06
相关资源
最近更新 更多