Проблемы шифрования Nodejs с модулем "crypto" npm - PullRequest
0 голосов
/ 04 апреля 2019

Когда я пытаюсь зашифровать или расшифровать токен, у меня появляется эта ошибка:

internal/crypto/cipher.js:92
    this[kHandle].initiv(cipher, credential, iv, authTagLength);
                  ^

Error: Invalid IV length

Я должен сделать то же шифрование, что и по этой ссылке: здесь

Может ли кто-нибудь мне помочь? :)

Всем хорошего дня!

Вот что я сделал:

var crypto = require('crypto'),
    key = 'xNRxA48aNYd33PXaODSutRNFyCu4cAe/InKT/Rx+bw0=',
    iv = '81dFxOpX7BPG1UpZQPcS6w==';

function encrypt_token(data) {
    var cipher = crypto.createCipheriv('aes-256-cbc', key, iv);
    cipher.update(data, 'binary', 'base64');
    return cipher.final('base64');
}

function decrypt_token(data) {
    var decipher = crypto.createDecipheriv('aes-256-cbc', key, iv);
    decipher.update(data, 'base64', 'binary');
    return decipher.final('binary');
}

console.log('NodeJS encrypt: ', encrypt_token('partnerId=1&operationId=30215&clientId=CDX12345&timestamp=1545735181'));
console.log('NodeJS decrypt: ', decrypt_token('hxdBZWB4eNn0lstyQU3cIX3WPj4ZLZu-C8qD02QEex8ahvMSMagFJnAGr2C16qMGsOLIcqypO8NX4Tn65DCrXGKrEL5i75tj6WoHGyWAzs0'));

1 Ответ

0 голосов
/ 04 апреля 2019

Вам необходимо использовать строки буфера или utf8 в качестве параметров для createCipheriv

Это работает:

'use strict';

const crypto = require('crypto');

const key = Buffer.from('xNRxA48aNYd33PXaODSutRNFyCu4cAe/InKT/Rx+bw0=', 'base64');
const iv = Buffer.from('81dFxOpX7BPG1UpZQPcS6w==', 'base64');

function encrypt_token(data) {
  const cipher = crypto.createCipheriv('aes-256-gcm', key, iv);
  const encryptedData = cipher.update(data, 'utf8', 'base64') + cipher.final('base64');
  return encryptedData;
}

function decrypt_token(data) {
  const decipher = crypto.createDecipheriv('aes-256-cbc', key, iv);
  const decripted = decipher.update(data, 'base64', 'utf8') + decipher.final('utf8');
  return decripted;
}

console.log('NodeJS encrypt: ', encrypt_token('partnerId=1&operationId=30215&clientId=CDX12345&timestamp=1545735181'));
console.log('NodeJS decrypt: ', decrypt_token('hxdBZWB4eNn0lstyQU3cIX3WPj4ZLZu-C8qD02QEex8ahvMSMagFJnAGr2C16qMGsOLIcqypO8NX4Tn65DCrXGKrEL5i75tj6WoHGyWAzs0'));

Обратите внимание также, что вам нужно объединить результатыupdate и final

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...