recherche

Maison  >  Questions et réponses  >  le corps du texte

Comment puis-je convertir ce code de cryptage DES du code Java en JavaScript ?

Comment convertir ce code Java en 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));
}

Je l'ai essayé moi-même et le résultat est :

  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;
  }

Mais j'ai eu l'erreur ERR_CRYPTO_INVALID_KEYLEN car la longueur de ma clé n'est pas de 8. Je suppose qu'il manque cette partie du code Java dans mon code JavaScript, mais je ne sais pas comment traduire cette partie en JavaScript... :

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

P粉504080992P粉504080992515 Il y a quelques jours641

répondre à tous(1)je répondrai

  • P粉550257856

    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;
    }
    

    répondre
    0
  • Annulerrépondre