AES / CBC / PKCS5PADDING IV - Расшифровка с Java на NodeJs - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь расшифровать в NodeJs.Это работает на Java.Но я не могу добиться того же в Node.

Я использую версию узла: 8.4

Пожалуйста, найдите мой код NodeJs:

var crypto = require('crypto');
function decryption (message, key) {
    var messageArray = Buffer.from(message, 'base64');
    // var kekbuf =  Buffer(key, 'utf8');

    var ivBuffer = new Buffer([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);
    var iv = ivBuffer.slice(0, 16);

    var decipher = crypto.createDecipheriv('aes-256-cbc', key, iv);
    decipher.setAutoPadding(false);
    var dec = decipher.update(messageArray, 'base64');

    dec += decipher.final();
    return dec.toString();
}

Пожалуйста, найдите работающую Javaкод

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.DatatypeConverter;

class Test1 {
  public String decrypt(String message, String key) throws Exception {
    DatatypeConverter dtc = null;
    byte[] messagArray = dtc.parseBase64Binary(message);
    byte[] keyArray = dtc.parseBase64Binary(key);

    byte[] iv = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
    IvParameterSpec ivspec = new IvParameterSpec(iv);

    SecretKey secretKey = new SecretKeySpec(keyArray, "AES");
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");

    cipher.init(Cipher.DECRYPT_MODE, secretKey, ivspec);
    return new String(cipher.doFinal(messagArray));
  }
}

Я получаю другой расшифрованный текст.Я не могу достичь того же результата в NodeJ, что и в Java.

Пожалуйста, помогите мне с этим.

1 Ответ

0 голосов
/ 04 июня 2018

использовать библиотеку crypto2, эта библиотека исправила проблему с iv:

    const crypto2 = require('crypto2'); 

    AESDecrypt: function (encrypted, secretKey) {
            return new Promise((resolve, reject) => {
                if (encrypted && secretKey) {
                    crypto2.decrypt.aes256cbc(encrypted, secretKey, (err, decrypted) => {
                        if (err) {
                            reject(err);
                        } else {
                            resolve(decrypted);
                        }
                    });
                } else {
                    reject('Crypt - Invalid params!');
                }
            })
        }
...