我目前使用
base64_encode()来编码用户的密码,这很好用,因为它允许我简单地使用base64decode()来解密一个单词的密码,如果他们丢失密码就发送给那里的电子邮件.
我一直在阅读密码,很多人似乎都说你应该使用sha1()来编码密码.我全都是为了提高系统的安全性但是如果我转换为使用shal()那么我将无法向用户发送丢失的密码.
你用什么?你能给我一些建议吗?有没有办法解密可读密码来通过电子邮件发送给用户?
当我输入这个问题时,我只是记得有些论坛在请求时没有给你发密码,而是发送一个特殊的链接来重新设置你的密码,我猜这是因为他们无法解密你的密码?
//what I use now
$password_encoded = base64_encode($password);
//what I am considering using
$password_encoded = sha1($password);
Run Code Online (Sandbox Code Playgroud)
Rex*_*x M 43
请为了您的用户请不要以任何可逆的格式存储他们的密码!它是Base64编码还是三重DES 168位加密并不重要- 如果它是可逆的,它就像你根本不编码一样安全.
没有任何网站有兴趣保护自己或其用户(或有舔感)将通过电子邮件向用户发送密码.我们唯一能做的就是远程接近安全,就是向用户发送一封电子邮件,其中包含一个独特的一次性链接,可以让他们设置一个新密码.
试图与其他任何东西相处只是疏忽.让我们使用安全讨论中常用的场景:
用户Frederic的电子邮件遭到入侵.这可能是因为他的计算机已解锁或使用弱密码.无论如何,未经授权的人都可以访问他的消息.理想情况下,这只不过是陌生人阅读的一些令人尴尬的情书.不幸的是,未经授权的人发现论坛将以纯文本形式向Frederic的密码发送电子邮件.与大多数用户一样,Frederic对所有内容使用相同的密码,包括他的网上银行.他的用户名列在他银行的电子邮件中.现在情况非常不幸.
用户在与您建立基于凭据的关系时会信任您.这种信任的一部分是你将这些凭证作为你和他们之间的安全秘密.
有关
在SO上,很多周围的问题和想法得到了很好的回答:
Ben*_*n S 10
作为管理员,您实际上不需要回忆用户的密码.您只需要知道他们曾经提交过的字符串是否与另一个字符串相同.
如果用户忘记了密码,则无需告知他们的旧密码,只需让他们提供新密码即可.
由于您不需要知道实际的密码,因此使用单词的加密哈希似乎是一种安全存储方式.但是,已经制作了大量预先计算的字符串表,可以轻松地对其原始字符串进行反向查找.这些被称为彩虹表.
为了避免预先计算的字符串容易查找,您应该盐哈希之前您的密码.salt可以是他们的用户名前缀,或者他们的用户ID后缀,无论您对用户的额外信息是永久性的,您可以在身份验证期间轻松添加到密码.
您应该让用户重置密码,但永远不要检索他们的密码.这就是为什么你想要使用单向散列(SHA2)而不是一种允许你解码它的加密形式.
想象一下,如果你打开你的电子邮件.我可以简单地请求检索一些网站的密码,删除电子邮件,你永远不会知道.另一方面,如果您要求我重置密码,帐户密码将会改变,并且所有者显然会意识到出现了问题.(这是一个愚蠢的场景,但这个概念很重要)
通过尝试所有可能的单词组合(或使用彩虹表),可以"反转"散列,直到生成匹配的散列.避免这种情况的一种方法是使用salt附加/前置提供的密码,使其成为一个非常长且不可预测的字符串.salt应该是个人帐户唯一的唯一数据字符串.
在PHP中没有SHA2功能.SHA-2是一系列哈希算法,(SHA-256,SHA-384,SHA-512等......)
hash('sha256', 'The quick brown fox jumped over the lazy dog.');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21922 次 |
| 最近记录: |