【发布时间】:2013-05-03 23:55:30
【问题描述】:
首先让我说,我知道将敏感信息存储在 mysql 数据库中是个坏主意,所以请不要说“不要这样做”之类的回应影响。我正在构建一个网站,绝对必要存储社会安全号码,并且我必须能够从数据库中检索该数据(无哈希)。
也就是说,我研究了加密/解密数据的最佳方法,并构建了一个自定义函数来处理加密。这是我的加密功能:
function my_data_encrypt($value){
$salt=substr(uniqid('', true), 0, 20);
$key=$salt.MY_PRIVATE_KEY;
$enc_value=base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $value, MCRYPT_MODE_CBC, md5(md5($key))));
return array("enc_value"=>$enc_value, "salt"=>$salt);
}
所以基本上我正在为我的 salt 生成一个随机字符串,然后在 salt 上附加一个私钥 MY_PRIVATE_KEY,它在单独的配置文件中定义。然后我使用mcrypt_encrypt 加密数据,然后使用base64_encode 使加密安全地存储在数据库中。然后将加密的字符串和唯一的盐值一起返回并存储在数据库中。
我的想法是,将存储在配置文件(而不是数据库)中的“私钥”放入混合中会为加密增加另一个级别的安全性,即使有人破解了数据库并获得了加密value 和 salt,他们仍然没有解密数据所需的一切。
您能否让安全专家审查我的功能,并让我知道我的数据是否/如何被黑客入侵,以及我是否可以做些什么来改进它?
我已将此问题移至https://security.stackexchange.com/questions/35690/is-this-data-encryption-storage-method-secure。感谢您的反馈。
【问题讨论】:
-
security.stackexchange.com
标签: php security encryption mcrypt