AES加密在java和javascript中有不同的输出

AES加密在java和javascript中有不同的输出,javascript,java,encryption,aes,cryptojs,Javascript,Java,Encryption,Aes,Cryptojs,我有做AES的Java代码,我正在尝试使用cryptoJs在jQuery中实现同样的代码。但是jQuery中的输出是不同的。我不知道我哪里做错了。我是加密新手,请帮帮我 Java代码 public static String Encrypt(String text, String key) throws Exception { Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); byte[] keyBytes =

我有做AES的Java代码,我正在尝试使用cryptoJs在jQuery中实现同样的代码。但是jQuery中的输出是不同的。我不知道我哪里做错了。我是加密新手,请帮帮我

Java代码

public static String Encrypt(String text, String key) throws Exception {
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    byte[] keyBytes = new byte[16];
    byte[] b = key.getBytes("UTF-8");
    int len = b.length;
    if (len > keyBytes.length) len = keyBytes.length;
    System.arraycopy(b, 0, keyBytes, 0, len);
    SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
    IvParameterSpec ivSpec = new IvParameterSpec(keyBytes);
    cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);

    byte[] results = cipher.doFinal(text.getBytes("UTF-8"));
    String result = Base64.encodeToString(results, 0);
    return result;
}
JavaScript代码

var plainText = "abc"
var password = "password";
var key = CryptoJS.enc.Hex.parse(password);
var iv = CryptoJS.enc.Hex.parse(password);

var encrypted = CryptoJS.AES.encrypt(plainText, key, { iv: iv });

副本。这段代码是一个很好的例子,说明了为什么不应该使用自己的加密。请不要这样做,它已经坏得很厉害了——例如,你对key和iv使用了相同的值。@Satya,我检查过了,我很困惑。密钥我可以使用密码,但是iv呢。我如何决定?密钥不是密码,因为它必须是16、24或32字节长。使用正确的密钥派生函数,如PBKDF2。的副本。这段代码是一个很好的例子,说明了为什么不应该使用自己的加密。请不要这样做,它已经坏得很厉害了——例如,你对key和iv使用了相同的值。@Satya,我检查过了,我很困惑。密钥我可以使用密码,但是iv呢。我如何决定?密钥不是密码,因为它必须是16、24或32字节长。使用适当的密钥派生函数,如PBKDF2。