php - 将用户密码加密/散列到数据库中

标签 php mysql

对于发帖前在表单中输入的用户密码,我只是简单地做

<?php
   $pass=crypt($_POST['memberpwd']);   
?>

但是如果用户可能要求,我以后如何才能获得该密码的明文?谢谢你。

编辑:我找到了 How can I encrypt password data in a database using PHP?http://www.securityfocus.com/blogs/262 ,但我只想在更基本的层面上了解这一点,以了解它的实际工作方式。

最佳答案

始终仅使用(密码 随机生成的盐)的哈希值将密码存储在数据库中(结合 PHP 搜索这些术语应该会产生一些有用的结果)。

您永远不会恢复明文版本的密码,您为用户提供了在用户单击唯一的推荐 URL 后选择新密码的方法,您仅应要求通过电子邮件自动发送。

(非常基本的安全性)。

编辑:

我会解释为什么您需要盐。假设有人破坏了您的数据库并拥有包含简单(例如 MD5)密码哈希的 user 表。他(或她)现在可以使用简单的密码组合(例如,select * from users where pw_hash = ...)简单地对整个表发起字典攻击。如果您使用随机生成(但已存储)的盐来对密码进行哈希处理,则这种暴力破解攻击的利用难度会成倍增加。

关于php - 将用户密码加密/散列到数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9011213/

相关文章:

php - 如何使用 php 和 mysql 使用多对多关系提取数据

mysql - 左联接导致没有空行的列出现空行

MySQL——选择另一列的最小值后选择一列的最小值,并且在特定范围内

php - 是否可以将 kartik-gridview editable 设置为 inline 而不是 popup?

php - 显示过去 7 天 PHP 的结果

php - phpbb 上的 Cloudflare 用户 IP 问题

php - 从php中的选择数组标签获取值?

mysql - 如何根据3种关系选择表中的项目?

php - 如何在PhpStorm中为整个项目更新生成DocBlock?

php - mySQL:将一列的结果作为多列返回