所以我有这个网站,允许用户每天写。然后将其存储在纯文本的数据库中。这不是一个博客,所以一切都是私密的,我经常得到的最大抱怨是"我"仍然可以阅读他们所写的内容。它仍然不完美"私人的。我也不想成为泄露数千份私人日记的人。
因此,我的思路是如何将它仅仅私有化给他们。
当他们登录时:key = sha1(salt +密码)并将此密钥存储在SESSION中(这有多安全?)
当他们保存文字时:在将其保存到数据库之前用$ _SESSION ['键']对其进行加密
当他们阅读已保存的内容时,请先使用$ _SESSION ['键']进行解密。
这样安全吗?另外加密/解密UTF-8的最佳方法是什么?
如果有人更改了密码,它必须解密/重新加密所有内容。
答案 0 :(得分:3)
您应该在SESSION中存储密码的哈希值 永远不要在任何地方存储普通密码!!
另外,请考虑阅读此stackoverflow线程:Secure hash and salt for PHP passwords
要散列密码,您可以使用以下方法:
function generate_hash($password) {
$salt = "<some random string of characters>"; // do not change it later.
return md5($salt . $password);
}
对于加密,您可以使用mCrypt库。典型的算法可以是:
$key = 'password to (en/de)crypt';
$string = 'string to be encrypted';
$encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));
$decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($encrypted), MCRYPT_MODE_CBC, md5(md5($key))), "\0");
var_dump($encrypted);
var_dump($decrypted);
答案 1 :(得分:1)
您应该使用某种形式的加密。 PHP为此提供了mCrypt。逐点说明:
mcrypt
即可。我希望这有帮助!
答案 2 :(得分:0)
不要使用密码来加密密钥,密码不应该在逻辑中的任何地方使用,并且只能在登录时读取为哈希而不是纯文本。您可以使用其他内容(如用户电子邮件)生成密钥。