讓我先說我知道這是一個壞主意將敏感信息存儲在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);
}
所以基本上我生成了我的鹽一個隨機字符串,然後附加到鹽,在一個單獨的配置文件中定義的私有密鑰MY_PRIVATE_KEY
。然後,我使用mcrypt_encrypt
加密數據,然後使用base64_encode
使加密安全地存儲在數據庫中。然後將加密的字符串和唯一的salt返回並一起存儲在DB中。
我的想法是,將存儲在配置文件(不是數據庫)中的「私鑰」放入混合中會爲加密增加另一級別的安全性,即使有人攻擊了數據庫並獲得了加密值和salt,他們仍然沒有解密數據所需的一切。
您可以安全專家檢查我的功能,並讓我知道我的數據是否可以被黑客入侵,以及如果我還有其他事情可以改善它?
我已將此問題移至https://security.stackexchange.com/questions/35690/is-this-data-encryption-storage-method-secure。感謝您的反饋意見。
security.stackexchange.com – 2013-05-09 13:28:39
此外,http://codereview.stackexchange.com – 2013-05-09 13:28:59