Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用SHA512代替MD5存储登录密码_Php_Security_Password Storage - Fatal编程技术网

Php 使用SHA512代替MD5存储登录密码

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

我在网上读了很多关于MD5不太安全的文章,我决定将我的网站改为使用SHA512,我以前从来没有这样做过,所以我只是想请你检查一下我是否做得正确,或者是否有其他更安全的散列方法可以用来存储密码

$upass是我需要散列的用户密码

这是我最初使用MD5的PHP:

 $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都不是加密密码,而是加密散列函数。这是一个巨大的区别:哈希函数没有反向操作,而加密有反向操作(即解密)。