How to convert this Java code to JavaScript?
public static String getSignature(String skey, String iv, String data) throws Exception { IvParameterSpec Ⅳ = new IvParameterSpec(iv.getBytes("utf-8")); DESKeySpec desKey = new DESKeySpec(skey.getBytes("utf-8")); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey key = keyFactory.generateSecret(desKey); Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, key, Ⅳ); byte[] databyte = cipher.doFinal(data.getBytes("utf-8")); return new String(Base64.getEncoder().encode(databyte)); }
I tried it myself and the result is:
function getSignature( skey, iv, data, ) { const IV = Buffer.from(ivString, 'utf-8'); const desKey = Buffer.from(skey, 'utf-8'); const cipher = crypto.createCipheriv('des-cbc', desKey, IV); let encrypted = cipher.update(data, 'utf-8', 'base64'); encrypted += cipher.final('base64'); return encrypted; }
But I am getting ERR_CRYPTO_INVALID_KEYLEN
error because my key length is not 8. I'm guessing that my JavaScript code is missing this part of Java code, but I don't know how to translate this part to JavaScript... :
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey key = keyFactory.generateSecret(desKey);
P粉5502578562023-09-07 10:22:32
const crypto = require('crypto'); function getSignature(skey, iv, data) { const IV = Buffer.from(iv, 'utf-8'); const desKey = Buffer.from(skey, 'utf-8'); const cipher = crypto.createCipheriv('des', desKey.slice(0, 8), IV); let encrypted = cipher.update(data, 'utf-8', 'base64'); encrypted += cipher.final('base64'); return encrypted; }