【问题标题】:what are the php commands to create and retrieve password with SHA-256 encryption?使用 SHA-256 加密创建和检索密码的 php 命令是什么?
【发布时间】:2011-04-19 06:49:39
【问题描述】:

这里是新手。我正在尝试在他们创建帐户后使用 SHA-256 加密用户密码,然后当用户尝试登录时,它会尝试将他们的输入与 mysql 数据库中的任何加密密码相匹配。我想知道是否有人可以给我一个示例代码?

【问题讨论】:

  • SHA-256 不是加密函数,而是哈希函数。

标签: php authentication encryption sha256


【解决方案1】:

散列是单向的,所以你不能真正“检索”你散列的内容。

当您在注册时保存密码时,请使用以下内容:

$hash=hash('sha256', $password);

并且只在数据库中保存$hash。当用户尝试登录时,对他尝试使用的密码进行哈希处理,并将其与数据库中的密码进行比较(对于相同的输入,哈希处理总是会给出相同的结果)。如果它们相同,则他可以登录(如果满足所有其他检查)。

如果您想让用户找回忘记的通行证,请参考此earlier question

此外,散列密码的最佳做法是使用某种salt,这超出了本问题的范围,但请用谷歌搜索。

【讨论】:

  • 先“加盐”密码(即连接秘密字符串),这样拥有 SHA256 哈希数据库的人就无法查找匹配项。
  • mysql表中的散列密码关联什么变量类型?
  • @user701510 SHA256 哈希的长度始终为 64 个字符。这意味着您最好的选择是CHAR(64)(您不需要VARCHAR)。 See also this SO thread
【解决方案2】:

如果使用 PHP >= 5.5,您应该使用password_hash() 来存储密码,并使用password_verify() 来检查。如果使用 PHP >= 5.3,你应该使用这个compatibility module。如果使用较早版本的 PHP,则应升级。

不要使用你自己的密码散列。没有足够的压力。查看John the Ripper,了解仅使用加密散列(旨在快速!)散列的密码可以破解多快。

【讨论】:

    猜你喜欢
    • 2017-03-02
    • 1970-01-01
    • 2021-05-09
    • 2022-11-10
    • 1970-01-01
    • 2021-04-03
    • 2014-07-16
    • 1970-01-01
    • 2022-07-14
    相关资源
    最近更新 更多