Альтернативы повторению шифрования cryptojs aes в node.js - PullRequest
0 голосов
/ 25 июня 2018

У меня есть зашифрованный идентификатор электронной почты, который я храню в базе данных.

В следующий раз, когда придет тот же идентификатор электронной почты, я хотел зашифровать его и запросить в БД, существует ли такой же. Как я узнал, случайность AES является одним из ключевых аспектов его безопасности, поэтому такой подход невозможен. Я не должен устанавливать IV для повторения паттерна.

Какой подход лучше использовать в этом случае? Кроме получения всех идентификаторов и расшифровки и сопоставления на стороне клиента?

Любые указатели оценены.

1 Ответ

0 голосов
/ 25 июня 2018

Пока вы используете тот же ключ и тот же IV (вектор инициализации), вы получите тот же результат, например,

const crypto = require('crypto');

function encrypt(plainText, keyBase64, ivBase64) {

    var key = Buffer.from(keyBase64, 'base64');
    var iv = Buffer.from(ivBase64, 'base64');

    /* Using 128 Bit AES with CBS. */
    var cipher = crypto.createCipheriv('aes-128-cbc', key, iv);
    cipher.update(plainText, 'utf8', 'base64')
    return cipher.final('base64');
};


var keyBase64 = "sTEhO2zJ8f2Lck59VppiCQ==";
var ivBase64 = 'Xpu5CSY5hz0PeDnNF0TM4A==';

var plainText = 'Sample email text';

console.log('Plaintext: ', plainText);

var cipherText = encrypt(plainText, keyBase64, ivBase64);
console.log('Ciphertext: ', cipherText);

var cipherText2 = encrypt(plainText, keyBase64, ivBase64);
console.log('Ciphertext 2: ', cipherText2);

Вы также можете рассмотреть возможность хеширования электронной почты и сохранения хэша,например,

var sha256 = crypto.createHash('sha256').update(plainText).digest("hex");
console.log('SHA256: ', sha256);

Хеш будет стабильным для данного тела письма.

...