Php 使用SHA512代替MD5存储登录密码
我在网上读了很多关于MD5不太安全的文章,我决定将我的网站改为使用SHA512,我以前从来没有这样做过,所以我只是想请你检查一下我是否做得正确,或者是否有其他更安全的散列方法可以用来存储密码 $upass是我需要散列的用户密码 这是我最初使用MD5的PHP:Php 使用SHA512代替MD5存储登录密码,php,security,password-storage,Php,Security,Password Storage,我在网上读了很多关于MD5不太安全的文章,我决定将我的网站改为使用SHA512,我以前从来没有这样做过,所以我只是想请你检查一下我是否做得正确,或者是否有其他更安全的散列方法可以用来存储密码 $upass是我需要散列的用户密码 这是我最初使用MD5的PHP: $uname = mysql_real_escape_string($_POST['uname']); $sname = mysql_real_escape_string($_POST['sname']); $email = mysq
$uname = mysql_real_escape_string($_POST['uname']);
$sname = mysql_real_escape_string($_POST['sname']);
$email = mysql_real_escape_string($_POST['email']);
$upass = md5(mysql_real_escape_string($_POST['pass']));
以下是我使用SHA的新PHP:
$uname = mysql_real_escape_string($_POST['uname']);
$sname = mysql_real_escape_string($_POST['sname']);
$email = mysql_real_escape_string($_POST['email']);
$upass = mysql_real_escape_string($_POST['pass']);
$upass = hash('SHA512', $upass);
这里还有单词“password”的哈希字符串,只是为了确保哈希有效
SHA512:
b109f3bbbc244eb82441917ed06d618b9008dd09b3befd1b5e
MD5:
5f4dcc3b5aa765d61d8327deb882cf99
感谢您事先提供的任何帮助/建议 正确的方法是对算法使用
PASSWORD\u DEFAULT
。这样,您将拥有一个好的算法(bcrypt,如果您有PHP5.5),它可以在未来的PHP版本中自动升级为更好的算法,而无需更改代码。密码也用盐散列。正确的方法是使用算法的密码\u默认值。这样,您将拥有一个好的算法(bcrypt,如果您有PHP5.5),它可以在未来的PHP版本中自动升级为更好的算法,而无需更改代码。密码也是用盐散列的。听起来不错,我不熟悉密码散列,请您编辑我的代码以适应它好吗?在您的代码中,它几乎是散列的替代品。当然,除了散列,您还需要检查。这是通过使用。文档页面包含一些示例,可以帮助您入门。非常感谢,我刚刚补充了一点,有没有办法改变成本?是的。第三个参数是一个选项数组,它可以包含一个成本。@Bradley认为该成本应该花费CPU时间,并且不应设置为低于默认值。成本是bcrypt(不同于任何长度的SHA)适用于密码散列的原因之一。听起来很棒,我不熟悉密码散列,请您编辑我的代码以适应它好吗?在您的代码中,它几乎是散列
的替代品。当然,除了散列,您还需要检查。这是通过使用。文档页面包含一些示例,可以帮助您入门。非常感谢,我刚刚补充了一点,有没有办法改变成本?是的。第三个参数是一个选项数组,它可以包含一个成本。@Bradley认为该成本应该花费CPU时间,并且不应设置为低于默认值。成本是bcrypt(与SHA不同,任何长度的bcrypt)适用于密码散列的原因之一。当您修复/更新代码以使用“良好的现代实践”时,也要使用占位符/参数化查询以及mysqli或PDO。MD5和SHA512都不是加密密码,而是加密散列函数。这是一个巨大的区别:散列函数没有反向操作,而加密有反向操作(即解密)。当您修复/更新代码以使用“良好的现代实践”时,还使用占位符/参数化查询和mysqli或PDO。MD5和SHA512都不是加密密码,而是加密散列函数。这是一个巨大的区别:哈希函数没有反向操作,而加密有反向操作(即解密)。