我的主要问题是,我想检查具有相同SSN的人是否有多个帐户。目前,所有个人身份信息都经过加密,解密需要花费大量时间。
我最初的想法是将ssn列添加到数据库中的用户列。然后我可以简单地进行一个查询,在那里我让所有用户都使用ssn或用户A.
我不想将ssn以明文形式存储在数据库中。我想的只是腌制和以某种方式散列它。
我的主要问题是,这是安全的(或者它有多安全)?有什么简单的方法可以使用python进行salt和hash或加密和ssn?
编辑:不需要显示SSN。
这是使用MySQL数据库。
答案 0 :(得分:3)
不要加密SSN,当攻击者获得数据库时,他也会获得加密密钥。
仅仅使用哈希函数是不够的,只添加一个盐对提高安全性没什么作用。
基本上在与密码相同的mannor中处理SSN。
相反,使用随机盐对HMAC进行大约100毫秒的持续时间并使用哈希值保存盐。使用PBKDF2
(又名Rfc2898DeriveBytes
),password_hash
/ password_verify
,Bcrypt
等功能以及类似功能。关键是要让攻击者花费大量时间通过暴力查找密码。保护您的用户非常重要,请使用安全密码方法。
答案 1 :(得分:1)
根据@zaph的建议。我决定使用PBKDF2。然后我可以创建一个BIT列并将其编入索引。
我的简单散列看起来像
Lead.find({ownerId:owner._id}, function(err, data){
if(err){res.json(err)}
else{
var fields = ['lead', 'salutation', 'fname','lname','title','email','mobile','rating','address','city','state','zcode','company','industry','empSize','lsource'];
var csv = json2csv({ data: data, fields: fields });
var path='./public/csv/file'+Date.now()+'.csv';
fs.writeFile(path, csv, function(err,data) {
if (err) {throw err;}
else{
res.download(path); // This is what you need
}
});
}
});
答案 2 :(得分:-1)
如果您需要显示这些SSN,您的问题并不清楚。我假设你不这样做。将SSN存储在SHA2哈希中。然后,您可以执行SQL查询以搜索这些散列值。仅存储加密显示的最后4位数字。