你怎么将这段Java代码转换为JavaScript中的DES加密代码?

huangapple go评论89阅读模式
英文:

How do you convert this DES encryption code from Java code to JavaScript?

问题

  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-cbc', desKey, IV);
    let encrypted = cipher.update(data, 'utf-8', 'base64');
    encrypted += cipher.final('base64');
    return encrypted;
  }
英文:

How can I 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 I got:

  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 got an ERR_CRYPTO_INVALID_KEYLEN error, because my key is not 8 in length. I'm guessing that my JavaScript code is missing this part of the Java code, but I don't know how to translate this part into JavaScript...:

  SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
  SecretKey key = keyFactory.generateSecret(desKey);

答案1

得分: -1

以下是代码的中文翻译部分:

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;
}
英文:
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;
}

huangapple
  • 本文由 发表于 2023年7月3日 16:49:24
  • 转载请务必保留本文链接:https://go.coder-hub.com/76603215.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定