2013-06-07 2 views
2

Я создаю шифр, передающий два буфера. buf1 - это ключ, 32-байтовый буфер и buf2, который является IV, также представляет собой 32-байтовый буфер, который я нарезаю, чтобы использовать только 16 байт. Документация говорит, что cipher.update и cipher.final возвращают буфер, когда ничего не указано. Это на самом деле то, что я хочу. Хотя я предполагаю, что могу просто создать новый буфер (зашифрованный, «двоичный»), чтобы преобразовать его, мне интересно, могу ли я что-то делать неправильно.crypto.createCipheriv -> cipher.update + cipher.final не возвращает буфер?

> var cipher = crypto.createCipheriv('aes-256-cbc', buf1, buf2.slice(0,16)); 
undefined 
> var crypted = cipher.update(new Buffer('this is some test')); 
undefined 
> crypted += cipher.final(); 
'!t\u001f\u0004>.\u0012\u0001���K\u001bSiA�]3\u0017�6�&�.��\u0015�V?' 
0> Buffer.isBuffer(crypted) 
false 

http://nodejs.org/api/crypto.html#crypto_class_cipher

Я использую node.js версии 0.10.10, которая является последней стабильной и предположительно соответствует документации, связанный:

$ node -v 
v0.10.10 

Является ли это ошибка документации или ошибка с моей стороны? Я знаю, что с v0.8 pbkdf2 возвращает двоичную строку вместо буфера, а теперь с 0.10.10 возвращает буфер, как указано в документах. Я надеялся, что шифр также будет работать со всеми буферами вместо использования двоичных файлов ... для согласованности.

ответ

6

Вы объединяете их с помощью +=, который превращает буферы в строки. Ваш код должен быть чем-то вроде этого:

var cipher = crypto.createCipheriv('aes-256-cbc', buf1, buf2.slice(0,16)); 
var cryptedBuffers = [cipher.update(new Buffer('this is some test'))]; 
cryptedBuffers.push(cipher.final()); 

// at this point `cryptedBuffers` is an array of buffers which you can turn 
// into a single buffer by doing 

var crypted = Buffer.concat(cryptedBuffers); 
+0

ах избили меня на 9 секунд! ;) – robertklep

+0

Hahaha, второй раз сегодня :) http://stackoverflow.com/questions/16986660/javascript-variables-hoisting-in-nodejs-async/16986789 – matehat

+0

Такова жизнь на SO! :) – robertklep

Смежные вопросы