gpt4 book ai didi

java - AES 中的错误填充异常

转载 作者:行者123 更新时间:2023-12-02 07:41:02 26 4
gpt4 key购买 nike

我正在开发一个项目,需要向用户发送验证链接。因此使用 AES 加密对其用户名进行加密。我的代码工作正常,即加密和解密工作正常,但仅在我测试时的程序中工作正常。我加密了一个字符串,然后解密了它。它在“本地”运行良好。

问题是,当我发送带有激活链接的电子邮件并单击它时,会出现错误:

javax.crypto.BadPaddingException:给定的最终 block 未正确填充

我的代码如下所示:

public class AES {

private static final String algo="AES";
private static final byte[] keyValue=
new byte[]{somekey};

private static Key generateKey() throws Exception{

Key key= new SecretKeySpec(keyValue, algo);

return key;
}

public static String encrypt(String email) throws Exception{

Key key=generateKey();
Cipher c=Cipher.getInstance(algo);
c.init(Cipher.ENCRYPT_MODE, key);
byte[] encVal=c.doFinal(email.getBytes());
String encryptedEmail= new BASE64Encoder().encode(encVal);

return encryptedEmail;
}

public static String decrypt(String encryptedEmail) throws Exception{

Key key=generateKey();
Cipher c=Cipher.getInstance(algo);
c.init(Cipher.DECRYPT_MODE, key);

byte[] decodeEmail= new BASE64Decoder().decodeBuffer(encryptedEmail);
byte[] decodedEmail=c.doFinal(decodeEmail);

String decryptedEmail= new String(decodedEmail);

return decryptedEmail;
}

}

最佳答案

我使用 Bouncy CaSTLe 库的 Base64 编码器/解码器运行它,一点问题都没有。检查您的输入/输出并使用有效的 Base 64 编码器/解码器,而不是具有未指定输入/输出的 Sun 内部编码器/解码器。

警告:当您使用未指定的字符编码时,它将使用特定于平台的字符编码,因此您的输入/输出在不同的系统上可能会有所不同。尝试使用 Charset.forName("UTF8") 以获得最兼容的字符编码(在 String 构造函数和 toBytes 方法中)。

关于java - AES 中的错误填充异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11590739/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com