解密时出现 javax.crypto.IllegalBlockSizeException

标签 java cryptography

我当前编写的解密算法如下,

    public String decrypt(String enc) throws Exception
    {
        Key key = k;
        Cipher crypt = Cipher.getInstance("AES");
        crypt.init(Cipher.DECRYPT_MODE,key);
        byte[] decrypt = crypt.doFinal(enc.getBytes());
        return new String(decrypt);
    }

我得到的错误是在行

 byte[] decrypt = crypt.doFinal(enc.getBytes());

我见过与本文类似的问题,但我使用的是 128 位 key ,所以我很确定没有填充。

这就是我生成 key 的方式

  public static SecretKey getKey() throws Exception
  {
    KeyGenerator keyGen = KeyGenerator.getInstance("AES");
    keyGen.init(128); 
    return keyGen.generateKey();
  }

此外,使用 Base64 进行解码会产生完全相同的错误

    public String decrypt(String enc) throws Exception
    {
        Key key = k;
        Cipher crypt = Cipher.getInstance("AES");
        crypt.init(Cipher.DECRYPT_MODE,key);
        byte[] decrypt = crypt.doFinal(Base64.getMimeDecoder().decode(enc));
        return new String(decrypt);
    }

最佳答案

public String decrypt(String enc)

当您到达这里时,问题已经发生了。问题是您正在 String 中传递密文。 String 不是二进制数据的容器。使用byte[]

关于解密时出现 javax.crypto.IllegalBlockSizeException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42755334/

相关文章:

cryptography - RSA key 长度和导出限制

c# - RSA 加密 - 使用私钥加密

java - 当分析 session 结束时,类检测是否会被删除?

java - 从图库中选择图像到 ImageView 后进行图像压缩

java - Thread.UncaughtExceptionHandler 或 Map.Entry 等接口(interface)中怎么会有点(.)?

java - Eclipse 符合 "Unresolved generator name"但一切正常

node.js - Node.js 和 WebCrypto 之间的 ECDSA 签名似乎不兼容?

.net - Microsoft 的 GUID 生成器在密码学上是否安全

c - C 中的 OpenSSL 编程

java - setHorizo​​ntalAlignment(CENTER) - CENTER 无法解析为变量