Node.js и крипто библиотека - PullRequest
       47

Node.js и крипто библиотека

9 голосов
/ 21 декабря 2010

У меня странные проблемы с крипто-библиотекой Node. Я написал этот простой скрипт тестирования AES:

var cipher = crypto.createCipher('aes-256-cbc','InmbuvP6Z8')
var text = "123|123123123123123";
cipher.update(text,'utf8','hex')
var crypted = cipher.final('hex')
var decipher = crypto.createDecipher('aes-256-cbc','InmbuvP6Z8')
decipher.update(crypted,'hex','utf8')
var dec = decipher.final('utf8')

Когда я делаю console.log (dec), он нулевой. По какой-то причине, если я устанавливаю тест «123 | 123123», он работает. Так почему же «123 | 123123» работает, а «123 | 123123123123123» нет?

Ответы [ 3 ]

28 голосов
/ 24 декабря 2010

Вам необходимо сохранить возврат из cipher.update, а также cipher.final, чтобы убедиться, что у вас есть все.

cipher.update "возвращает зашифрованное содержимое и может вызываться много раз с новыми даннымив виде потока ":

http://nodejs.org/docs/v0.2.5/api.html#cipher-update-247

cipher.final" возвращает все оставшееся зашифрованное содержимое ".

Я думаю, что вы просто добавляете результаты к каждому вызову, как этот:

var crypto = require('crypto');
var cipher = crypto.createCipher('aes-256-cbc','InmbuvP6Z8');
var text = "123|123123123123123";
var crypted = cipher.update(text,'utf8','hex');
crypted += cipher.final('hex');
var decipher = crypto.createDecipher('aes-256-cbc','InmbuvP6Z8');
var dec = decipher.update(crypted,'hex','utf8');
dec += decipher.final('utf8');

Я получаю '12443a347e8e5b46caba9f7afc93d71287fbf11169e8556c6bb9c51760d5c585' для зашифрованного и '123 | 123123123123123' для dec в вышеуказанном с узлом v0.2.5 * 101

8 голосов
/ 09 марта 2011

RandomEtc корректен, но на всякий случай, если кто-то споткнется в этом вопросе, использует 'base64' в качестве кодировки: Не. Придерживайтесь 'hex'.По крайней мере, в версии 0.4.2 есть ошибка, которая может привести к повреждению данных при использовании 'base64'.Смотри: https://github.com/joyent/node/issues/738/

1 голос
/ 12 декабря 2013

Обратите внимание, что оператор += не будет работать в более поздних версиях node.js.Пожалуйста, следуйте советам, данным в Node.js Крипто-классе, возвращающем разные результаты с обновленной версией и используйте Buffer.concat()

...