Я пытаюсь выполнить шифрование в Node.js 7.5.0, используя алгоритм «des-cbc». Согласно RFC 1423, для этого алгоритма требуется 64-битный криптографический ключ и 64-битный криптографический ключ. -битный вектор инициализации.
Я пытаюсь использовать ключ и iv, состоящий из 8 символов Latin-1; однако Node говорит: «Ошибка: недопустимая длина IV». Вот пример кода:
let crypto = require('crypto');
let key = '\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8',
iv = '\xb8\xb7\xb6\xb5\xb4\xb3\xb2\xb1';
let cipher = crypto.createCipheriv('des-cbc', Buffer.from(key), Buffer.from(iv));
Если я изменю iv на 8 символов ASCII, то Node скажет: «Ошибка: неверная длина ключа»:
let crypto = require('crypto');
let key = '\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8',
iv = 'abcdefgh';
let cipher = crypto.createCipheriv('des-cbc', Buffer.from(key), Buffer.from(iv));
Но если и ключ, и iv имеют 8 символов ASCII, это работает:
let crypto = require('crypto');
let key = 'hgfedcba',
iv = 'abcdefgh';
let cipher = crypto.createCipheriv('des-cbc', Buffer.from(key), Buffer.from(iv));
Почему символы Latin-1 нельзя использовать для ключа и iv?
Buffer.from(key, "binary")
- person Artjom B.   schedule 01.04.2017xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8
на самом деле\xb0\xb2\xb2\xb4\xb4\xb6\xb6\xb8
. - person zaph   schedule 01.04.2017const buf = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]);
. Я предполагаю, что текущий буфер интерпретируется как строка, а не двоичный массив (и я предполагаю, что Артем так и делает). - person Maarten Bodewes   schedule 01.04.2017