JavaScript CryptoJS与Java AES不匹配

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

我遇到了从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");
        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摘要。