NodeJS Crypto randomBytes для удвоения размера шестнадцатеричной строки - PullRequest
1 голос
/ 11 марта 2019

У меня странная проблема с использованием криптографии NodeJS и функции crypto.randomBtyes. Я обнаружил странное поведение, которое, кажется, только недавно появилось в моем приложении NodeJS / Typescript 3.2.

Ошибка имеет смысл сама по себе: неверная длина ключа в Cipheriv.createCipherBase (внутренний / crypto / cipher.js: 79: 18)

После проверки длины ключа он удваивает запрошенное число байтов. Я назвал это «странным», поскольку он работал ранее (по состоянию на четверг / пятницу на прошлой неделе (3/7/2019 - 3/8/2019), но с этого утра было обнаружено новое поведение. Однако я не я не могу запускать какие-либо обновления, так как, надеюсь, я упустил что-то очевидное. Я мог бы изменить размер ключа, чтобы он составлял половину от того, что я хочу, однако я хотел увидеть, пропускаю ли я что-то простое, прежде чем приступить к взлому.

Вот довольно простой пример моей криптографической реализации.

import crypto = require('crypto');

export class Encryption {
    static GenerateRandomBytesToHex(size: number): string {
        return crypto.randomBytes(size).toString('hex');
    }
}

Однако при звонке:

let cipherKey = Encryption.GenerateRandomBytesToHex(32);

Возвращается строка из 64 символов, а не строка из 32 символов.

Пример: c8a8437677fcfab679f92c8470ffc34b932f5aaa3296c09f652d2becfe1db8b2 (длиной 64 символа)

Это реализация концепций, изложенных в этой статье: http://vancelucas.com/blog/stronger-encryption-and-decryption-in-node-js/

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 11 марта 2019

GenerateRandomBytesToHex функция возвращает вам хеш длиной X байт внутри String, где каждый байт отображается в шестнадцатеричном значении.

Шестнадцатеричное значение числа 42 равно 0x2A. Вы можете видеть, что один байт (от 0 до 254) отображается с использованием 2 символов в шестнадцатеричном формате. Поэтому нормально, что 32 байта отображаются как 64 символа.


Пример: https://codebeautify.org/string-hex-converter

enter image description here

...