gpt4 book ai didi

Nodejs Crypto Javascript 中的 javax.crypto.Cipher 等效代码

转载 作者:太空宇宙 更新时间:2023-11-04 12:26:22 25 4
gpt4 key购买 nike

我正在尝试将下面的java代码转换为nodejs。

public static String encrypt(String accessToken) throws Exception {
Cipher cipher = Cipher.getInstance("AES");
String merchantKey = "11111111111111111111";
String st = StringUtils.substring(merchantKey, 0, 16);
System.out.println(st);
Key secretKey = new SecretKeySpec(st.getBytes(), "AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] encryptedByte = cipher.doFinal(accessToken.getBytes());

// convert the byte to hex format
StringBuffer sb = new StringBuffer();
for (int i = 0; i < encryptedByte.length; i++) {
sb.append(Integer.toString((encryptedByte[i] & 0xff) + 0x100, 16).substring(1));
}
return sb.toString();
}

这是我能够弄清楚的-

function freeChargeEncryptAES(token){
var fcKey = "11111111111111111111".substring(0, 16);
var cipher = crypto.createCipher('aes-128-ecb', fcKey, "");
var encrypted = cipher.update(token,'ascii','hex');
encrypted += cipher.final('hex');
return encrypted;
}

我无法获得相同的输出。例如,如果

token = "abcdefgh"

Java 代码输出 - bc02de7c1270a352a98faa686f155df3

Nodejs 代码输出 - eae7ec6943953aca94594641523c3c6d

我已阅读 this answer默认加密算法是aes-ecb,不需要IV。由于 key 长度为 16,我假设 aes-128-ecb (16*8 = 128) 是我应该使用的算法。

有人可以帮我解决这个问题吗?

最佳答案

只需要改变 -

crypto.createCipher('aes-128-ecb', fcKey, "");

crypto.createCipheriv('aes-128-ecb', fcKey, "");

原因很简单 - createCipher 方法将第二个参数视为加密密码,而它是加密 key

我的错,即使读完后this answer ,我使用了错误的方法(crypto.createCipher 而不是 crypto.createCipheriv)。下面是nodejs 中正确的工作代码。这就是所需要的。

function freeChargeEncryptAES(token){
var fcKey = "11111111111111111111".substring(0, 16);
var cipher = crypto.createCipheriv('aes-128-ecb', fcKey, "");
var encrypted = cipher.update(token,'ascii','hex');
encrypted += cipher.final('hex');
return encrypted;
}

关于Nodejs Crypto Javascript 中的 javax.crypto.Cipher 等效代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38352275/

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