解密时javax.crypto.IllegalBlockSizeException

时间:2017-03-13 01:30:51

标签: 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位密钥,所以我很确定没有填充。

这就是我生成密钥的方法

  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);
    }

1 个答案:

答案 0 :(得分:1)

public String decrypt(String enc)

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