使用 Base64 的解密方法中的 javax.crypto.BadPaddingException

Posted

技术标签:

【中文标题】使用 Base64 的解密方法中的 javax.crypto.BadPaddingException【英文标题】:javax.crypto.BadPaddingException in decrypt method using Base64 【发布时间】:2014-05-20 02:24:19 【问题描述】:

我正在使用下面的代码加密和解密密码。

public static String encrypt(String data, Key key) throws Exception 

    Cipher cipher = Cipher.getInstance("RSA");
    cipher.init(Cipher.ENCRYPT_MODE, key);
    byte[] encryptedBytes = cipher.doFinal(data.getBytes());
    byte[] base64Bytes = Base64.encodeBase64(encryptedBytes);
    String base64EncodedString = new String(base64Bytes);
    return base64EncodedString;


public static String decrypt(String encrypted, Key key) throws Exception 

    Cipher cipher = Cipher.getInstance("RSA");
    cipher.init(Cipher.DECRYPT_MODE, key);
    byte[] decoded = Base64.decodeBase64(encrypted.getBytes());
    byte[] decrypted = cipher.doFinal(decoded);
    return new String(decrypted);

加密工作正常。 decrypt 方法的 doFinal 方法抛出异常。

例外:

[4/4/14 12:36:59:522 CDT] 00000024 SystemErr R 原因: javax.crypto.BadPaddingException: 不是 PKCS#1 块类型 2 或零填充 [4/4/14 12:36:59:523 CDT] 00000024 SystemErr R at com.ibm.crypto.provider.RSA.engineDoFinal(未知来源)[4/4/14 12:36:59:523 CDT] 00000024 SystemErr R at javax.crypto.Cipher.doFinal(未知来源)[4/4/14 12:36:59:523 CDT] 00000024 SystemErr R at com.moneygram.webpoe.util.SecurityProvider.decrypt(SecurityProvider.java:171) [4/4/14 12:36:59:524 CDT] 00000024 SystemErr R at com.moneygram.webpoe.util.SecurityProvider.decrypt(SecurityProvider.java:137)

如果有人对此有任何解决方案,请帮助我?如果这是不完整的信息,我可以提供。我被这个困住了!!!

【问题讨论】:

哦,忘了欢迎你。欢迎来到*** :) 【参考方案1】:

我不确定您的问题,但我知道您过于依赖默认值 - 对于密钥、字符集和加密模式 + 填充模式。

尝试以下方法,请说明这是否能解决您的问题:

public static String encrypt(String data, RSAPublicKey key) throws Exception 

    Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
    cipher.init(Cipher.ENCRYPT_MODE, key);
    byte[] encryptedBytes = cipher.doFinal(data.getBytes(StandardCharsets.UTF_8));
    return Base64.encodeBase64String(encryptedBytes);


public static String decrypt(String encrypted, RSAPrivateKey key) throws Exception 

    Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
    cipher.init(Cipher.DECRYPT_MODE, key);
    byte[] decoded = Base64.decodeBase64(encrypted);
    byte[] decrypted = cipher.doFinal(decoded);
    return new String(decrypted, StandardCharsets.UTF_8);

【讨论】:

看起来是固定的。我仍在对此进行测试。 你在解决这个问题吗?如果是,请提及你的错误是什么。?感谢您查看我的评论。

以上是关于使用 Base64 的解密方法中的 javax.crypto.BadPaddingException的主要内容,如果未能解决你的问题,请参考以下文章

python中的base64加密解密

使用 AES 和 Base64 加密字符串

Base64加密解密方法

python之base64加解密

python之base64加解密

python之base64加解密