mongodb:加密字段

时间:2015-08-05 08:22:39

标签: node.js mongodb security encryption

我正在加密mongodb中的SSN。但是,我需要使用SSN作为唯一标识符,以确保具有该SSN的人不插入重复项。所以基本上我想在保存之前检查重复的SSN。但是,我不确定在使用AES函数加密此字段后是否能够执行此操作。如果我加密并签署两个与AES相同的字符串,输出是否仍然相同?

如果没有,那么什么是好的选择呢?我曾考虑过散列SSN,但SSN似乎有这么小的熵(它的9个数字,其中一些在某种程度上是可以预测的)。如果我加盐,我将失去在该字段上分配唯一索引的能力,除非我使用的静态盐并没有真正做多。

加成

我将使用node.js加密核心模块在应用程序级加密。

1 个答案:

答案 0 :(得分:1)

使用相同的对称AES密钥来加密2个相同的字符串将产生相同的输出。因此,您可以通过将加密字段与使用相同密钥加密的值进行比较来识别加密字段是否唯一。

的PoC:

var crypto = require('crypto');

var cipher = crypto.createCipher('aes-256-ctr', "someString");
var cipher2 = crypto.createCipher('aes-256-ctr', "someString");

var crypted = cipher.update("hello world",'utf8','hex');
var crypted2 = cipher2.update("hello world",'utf8','hex');

crypted === crypted2 //true