Md5盐密码php

Kil*_*ise 2 php security encryption md5

我知道有很多关于这个问题的问题,但我真的需要问这个问题.

今天我一直在用md5加密密码.

所以我所做的就是.

我有4种盐.(它们根据用户值而变化)

  1. 从电子邮件ID和substr然后md5他们
  2. 来自电子邮件和id substr其他职位
  3. 一个长字符串,substr它然后md5它
  4. 另一个长字符串,substr它然后md5它

然后我md5 salt1和3以及盐2和盐4的密码

在此之后,每当用户更改其电子邮件或其ID被更改时,我都必须自动更改密码.

你们怎么看待这件事?

Fab*_*idt 14

没有.

MD5坏了坏.

使用mailaddress作为盐是一个好主意.但是使用md5不是.请改用bcrypt,scrypt或pbkdf2.

除非你真的知道自己在做什么,否则不要发明自己的意识,相信我,你不会


Sve*_*sen 5

首先,让我们定义一些术语.

  • 加密是指对消息进行编码以使其无法读取.加密涉及明文,密码密钥.这就像把一本书(明文)放在一个锁定的房间(密码)中,只能用一个已知的工具(一把钥匙)打开.加密有很多种,但这是一个简单的描述.加密是双向的,这意味着您可以对消息进行编码和解码.

  • 加密哈希是指您获取任何类型的数据并为其生成固定大小的值(通常称为哈希摘要).加密哈希是单向的,这意味着你无法逆转这个过程.

  • 酸盐是一个唯一的字符串,或位的集合,类似于一个随机数(的唯一号码只使用一次).盐只用于使饼干处理哈希列表变得不可行.它们不应被用作秘密(即加密密钥).当谈到盐时,人们通常谈论随机性的唯一原因是因为他们想要产生一种独特的盐(如果随机性不够大,他们可能会遇到碰撞的盐).

好的,现在你应该如何散列密码.

散列密码的一种相对安全的方法是简单地在密码上添加唯一的哈希值,然后使用密码保存盐:

$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是一个受欢迎的.

  • "如果你的网站没有从用户那里检索任何敏感数据,这是一种很好的方法." 不它不是.用户重复使用密码.您必须确保,如果您的数据库被黑客入侵,则密码不会被强制执行.大多数密码都是使用简单的算法构建的,包括网站名称(最好的情况).但通常你可以用密码登录到twitter,facebook或paypal! (2认同)