У меня странная проблема с использованием криптографии 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/
Любая помощь будет принята с благодарностью.