Fab*_*idt 14
没有.
MD5坏了坏.
使用mailaddress作为盐是一个好主意.但是使用md5不是.请改用bcrypt,scrypt或pbkdf2.
除非你真的知道自己在做什么,否则不要发明自己的意识,相信我,你不会
首先,让我们定义一些术语.
加密是指对消息进行编码以使其无法读取.加密涉及明文,密码和密钥.这就像把一本书(明文)放在一个锁定的房间(密码)中,只能用一个已知的工具(一把钥匙)打开.加密有很多种,但这是一个简单的描述.加密是双向的,这意味着您可以对消息进行编码和解码.
加密哈希是指您获取任何类型的数据并为其生成固定大小的值(通常称为哈希或摘要).加密哈希是单向的,这意味着你无法逆转这个过程.
甲酸盐是一个唯一的字符串,或位的集合,类似于一个随机数(的唯一号码只使用一次).盐只用于使饼干处理哈希列表变得不可行.它们不应被用作秘密(即加密密钥).当谈到盐时,人们通常谈论随机性的唯一原因是因为他们想要产生一种独特的盐(如果随机性不够大,他们可能会遇到碰撞的盐).
好的,现在你应该如何散列密码.
散列密码的一种相对安全的方法是简单地在密码上添加唯一的哈希值,然后使用密码保存盐:
$pass = 'this is my password';
$salt = uniqid('', true);
$hash = sha1($pass . $salt);
// INSERT INTO users ('hash', 'salt') VALUES ('$hash', '$salt') WHERE ...
Run Code Online (Sandbox Code Playgroud)
如果您的网站没有从其用户检索任何敏感数据,这是一种可行的方法.
如果您处理敏感数据,或者您只是想确保您正在尽一切可能保证安全,那么有一个PHP函数可以为您进行散列处理.它被称为crypt()(阅读文档以了解它是如何工作的).以下是使用该函数散列密码的示例:
$pass = 'this is my password';
$salt = 'unique string';
$hash = crypt($password, '$2y$07$'.$salt.'$');
echo $hash;
Run Code Online (Sandbox Code Playgroud)
这将安全地散列密码.
需要注意的是,该crypt()功能比您能想到的任何功能都要安全得多(除非您是该领域的专家).
在较新版本的PHP(5.5.0+)中,有一个密码散列API,可以更简单地散列密码.
那里还有各种哈希库.PHPass是一个受欢迎的.