我知道关于此主题有很多问题,但我确实需要问这个。
今天我一直在使用md5加密密码。
所以我要做的是。
我有4种盐。 (它们根据用户值而变化)
然后我是md5 salt1和3以及带有salt 2和salt4的密码
此后,每当用户更改电子邮件或更改其ID时,我都必须自动更改密码。
你们对此有何看法?
没有。
MD5坏了。
将邮件地址用作盐是一个好主意。但不是使用md5。改为使用bcrypt,scrypt或pbkdf2。
除非您真的知道自己在做什么,并且不要相信我,否则不要发明自己的加密技术
首先,让我们定义一些术语。
Encryption是对消息进行编码以便无法阅读时。加密涉及plaintext,cipher和key。这就像将书(明文)放在锁着的房间(密码)中,该房间只能使用已知的工具(钥匙)打开。加密有很多种,但这只是一个简单的描述。加密是双向的,这意味着您可以对消息进行编码和解码。
[[[[Cryptographic散列是指获取任何类型的数据并为其生成固定大小值(通常称为hash或digest)的情况。加密哈希是单向的,这意味着您无法逆转该过程。
salt是一个唯一的字符串或一组位,类似于nonce(一个唯一的数字,仅使用一次)。盐仅用于使其不可行
散列密码的相对安全的方法是简单地将唯一的散列添加到密码上,然后用密码保存密码:
$pass = 'this is my password';
$salt = uniqid('', true);
$hash = sha1($pass . $salt);
// INSERT INTO users ('hash', 'salt') VALUES ('$hash', '$salt') WHERE ...
如果您的网站没有从用户那里检索任何敏感数据,这是一种好的方法。[如果您处理敏感数据,或者只是想确保自己正在做的一切都能确保资料安全,那么就有一个PHP函数可以为您执行哈希处理。它称为
crypt()
(阅读文档以了解其工作原理)。这是一个使用函数散列密码的示例:
crypt()
将安全地对密码进行哈希处理。要意识到的是
$pass = 'this is my password'; $salt = 'unique string'; $hash = crypt($password, '$2y$07$'.$salt.'$'); echo $hash;
功能比您能想到的任何东西都要安全得多(除非您是该领域的专家)。>>在较新版本的PHP(5.5.0+)中,有一个
crypt()
,可以更轻松地对密码进行哈希处理。还有各种哈希库。 password hashing API很受欢迎。
“ MD5坏了,坏了]