javax.crypto.IllegalBlockSizeException在解密时

javax.crypto.IllegalBlockSizeException在解密时,java,cryptography,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());

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

    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);
    }
你到这里时,问题已经发生了。问题是您正在以
字符串
传递密文<代码>字符串不是二进制数据的容器。使用
字节[]

一般建议:始终使用完全限定的密码字符串<代码>Cipher.getInstance(“AES”)可能会产生不同的密码。它很可能会导致添加AES/ECB/PKCS5P“,但不必如此。如果它发生更改,您将失去不同JVM之间的兼容性。仅供参考:切勿使用。它是确定性的,因此在语义上不安全。您至少应该使用随机模式,如或。最好是对密文进行身份验证,这样就不可能进行类似的攻击。这可以通过诸如GCM或EAX之类的经过身份验证的模式来实现,也可以通过一个方案来实现。
public String decrypt(String enc)