我编写的当前解密算法如下:
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);
}
最佳答案
public String decrypt(String enc)
当您到达这里时,问题已经发生了。问题是您要在
String
中传递密文。 String
不是二进制数据的容器。使用byte[]
。