JavaScript CryptoJS与Java AES不匹配
我遇到了从JavaScript到Java的加密和解密问题 这是我的JAVA代码JavaScript CryptoJS与Java AES不匹配,javascript,java,aes,cryptojs,Javascript,Java,Aes,Cryptojs,我遇到了从JavaScript到Java的加密和解密问题 这是我的JAVA代码 public class AES { private static SecretKeySpec secretKey; private static byte[] key; public static void setKey(String myKey) { MessageDigest sha = null; try { key = myKey.getBytes("UTF-8");
public class AES {
private static SecretKeySpec secretKey;
private static byte[] key;
public static void setKey(String myKey)
{
MessageDigest sha = null;
try {
key = myKey.getBytes("UTF-8");
sha = MessageDigest.getInstance("SHA-1");
key = sha.digest(key);
key = Arrays.copyOf(key, 16);
secretKey = new SecretKeySpec(key, "AES");
} catch (UnsupportedEncodingException | NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
public static String decrypt(String strToDecrypt, String secret)
{
try
{
setKey(secret);
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
return new String(cipher.doFinal(Base64.getDecoder().decode(strToDecrypt)));
}
catch (Exception e)
{
System.out.println("Error while decrypting: " + e.toString());
}
return null;
}
这是我的JavaScript代码
set(keys, value) {
varkey = CryptoJS.enc.Utf8.parse(keys);
var iv = CryptoJS.enc.Utf8.parse(keys);
var encrypted = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(value.toString()), key,
{
keySize: 16,
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.toString();
}
我收到来自JAVA的错误消息
Error while decrypting: javax.crypto.BadPaddingException: Given final block not properly padded. Such issues can arise if a bad key is used during decryption.
请帮我拿这个箱子。感谢您的光临可能是编码。。。base64或十六进制字符串。。确保编码是你所期望的,先生,那么根据我上面的代码,你能举个例子吗?非常感谢你的回复。我不做java,所以我没办法。。。java使用什么编码?base64?十六进制字符串?一些模糊的纯java编码?只需检查编码,确保它是sameJAVA AES与encode base64一起使用的。无论如何,谢谢你,先生,我将再次检查编码类型。这两种代码在功能上不同:加密使用CBC模式(需要IV),解密使用ECB模式(不需要IV)。切换到CBC进行解密,并使用同样用于加密的IV。此外,密钥在Java代码中使用SHA1摘要确定,而JavaScript代码中没有使用SHA1摘要。。。base64或十六进制字符串。。确保编码是你所期望的,先生,那么根据我上面的代码,你能举个例子吗?非常感谢你的回复。我不做java,所以我没办法。。。java使用什么编码?base64?十六进制字符串?一些模糊的纯java编码?只需检查编码,确保它是sameJAVA AES与encode base64一起使用的。无论如何,谢谢你,先生,我将再次检查编码类型。这两种代码在功能上不同:加密使用CBC模式(需要IV),解密使用ECB模式(不需要IV)。切换到CBC进行解密,并使用同样用于加密的IV。此外,密钥在Java代码中使用SHA1摘要确定,而JavaScript代码中没有使用SHA1摘要。