将JAVA中的aes加密转换为node



我有一个java 中的脚本

private static final String ALGO = "AES";
public static String encrypt(String Data,String secretKeyPhrase) throws Exception {
Key key = new SecretKeySpec(secretKeyPhrase.getBytes(), ALGO);
Cipher c = Cipher.getInstance(ALGO);
c.init(Cipher.ENCRYPT_MODE, key);
byte[] encVal = c.doFinal(Data.getBytes());
String encryptedValue = Base64.getEncoder().encodeToString(encVal);
encryptedValue= URLEncoder.encode(encryptedValue, "UTF-8");
return encryptedValue;
}

public static void main(String [] ar) throws Exception{
String result2=AESUtil.encrypt("3483", "BDFHJLNPpnljhfdb");
System.out.println(result2);
}

我需要在节点中复制这个,我做这个

var ciphertext = CryptoJS.AES.encrypt('3483', 'BDFHJLNPpnljhfdb').toString();

console.log(密文(;

在java结果中显示

3483

sAllhJ7zLxBKr8hJ7tLf9w%3D%3D

但在节点中

3483

U2FsdGVkX19Z/mnjJy3hYDcXfWnH5ayYngWMtUT1lw=

我做错了什么?

提前谢谢。

hi我可以用节点加密这是脚本

function encrypt(plaintext) {
var data = plaintext;
var iv = new Buffer(0);
const key = 'BDFHJLNPpnljhfdb'
var cipher = crypto.createCipheriv('aes-128-ecb',new Buffer(key),new Buffer(iv))
var crypted = cipher.update(data,'utf-8','base64')
crypted += cipher.final('base64')
return crypted;
}

结果为sAllhJ7zLxBKr8hJ7tLf9w==

这是使用scripto-js 的另一种方法

function encrypt(plaintext) {
var keyUtf8 = CryptoJS.enc.Utf8.parse("BDFHJLNPpnljhfdb")
var result = CryptoJS.AES.encrypt(plaintext, keyUtf8,{ mode: CryptoJS.mode.ECB,  
keySize: 128 }).toString();
return result;
}
function decrypt(ciphertext) {
var keyUtf8 = CryptoJS.enc.Utf8.parse("BDFHJLNPpnljhfdb")
var encrypted=ciphertext;
encrypted = CryptoJS.AES.decrypt(encrypted, keyUtf8, { mode: CryptoJS.mode.ECB,  
keySize: 128 });
var result = CryptoJS.enc.Utf8.stringify(encrypted).toString(); 
return result;
}
var ciphertext=encrypt("3483");
// result sAllhJ7zLxBKr8hJ7tLf9w==
var ciphertext=decrypt("sAllhJ7zLxBKr8hJ7tLf9w==");
// result 3483

最新更新