【发布时间】:2011-04-19 06:49:39
【问题描述】:
这里是新手。我正在尝试在他们创建帐户后使用 SHA-256 加密用户密码,然后当用户尝试登录时,它会尝试将他们的输入与 mysql 数据库中的任何加密密码相匹配。我想知道是否有人可以给我一个示例代码?
【问题讨论】:
-
SHA-256 不是加密函数,而是哈希函数。
标签: php authentication encryption sha256
这里是新手。我正在尝试在他们创建帐户后使用 SHA-256 加密用户密码,然后当用户尝试登录时,它会尝试将他们的输入与 mysql 数据库中的任何加密密码相匹配。我想知道是否有人可以给我一个示例代码?
【问题讨论】:
标签: php authentication encryption sha256
散列是单向的,所以你不能真正“检索”你散列的内容。
当您在注册时保存密码时,请使用以下内容:
$hash=hash('sha256', $password);
并且只在数据库中保存$hash。当用户尝试登录时,对他尝试使用的密码进行哈希处理,并将其与数据库中的密码进行比较(对于相同的输入,哈希处理总是会给出相同的结果)。如果它们相同,则他可以登录(如果满足所有其他检查)。
如果您想让用户找回忘记的通行证,请参考此earlier question。
此外,散列密码的最佳做法是使用某种salt,这超出了本问题的范围,但请用谷歌搜索。
【讨论】:
CHAR(64)(您不需要VARCHAR)。 See also this SO thread
如果使用 PHP >= 5.5,您应该使用password_hash() 来存储密码,并使用password_verify() 来检查。如果使用 PHP >= 5.3,你应该使用这个compatibility module。如果使用较早版本的 PHP,则应升级。
不要使用你自己的密码散列。没有足够的压力。查看John the Ripper,了解仅使用加密散列(旨在快速!)散列的密码可以破解多快。
【讨论】: