在 node.js 中重复 cryptojs aes 加密的替代方法

Alternatives to repeating a cryptojs aes encryption in node.js

我有一个加密的电子邮件 ID,我存储在数据库中。

下次出现相同的email id 时,我想加密它并查询数据库是否存在相同的。 据我所知,AES 的随机性是其安全性的关键方面之一,因此,这种方法是不可能的。我不应该将 IV 设置为重复模式。

在这种情况下,更适合采取什么方法?除了获取所有 ID 并进行客户端解密和匹配之外?

感谢任何指点。

只要你使用相同的Key和相同的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);

对于给定的电子邮件正文,哈希将是稳定的。