【问题标题】:PHP hashing using BCRYPT adds unwanted character使用 BCRYPT 的 PHP 散列添加了不需要的字符
【发布时间】:2018-02-16 21:49:56
【问题描述】:

当使用 BCRYPT 函数是 PHP 时,它会产生一个 **,当然这是意料之中的。但是,它还会在散列时添加不需要的字符,例如“.”(DOTS),这也是意料之中的。

我想知道是否有一个我可以在 PHP 中使用的散列函数,它不会在其中创建一个点的散列,或者我是否可以以某种方式告诉散列函数不要创建一个带点的散列。

我正在使用它创建一个唯一的链接密钥哈希。

$passHash = password_hash($email, PASSWORD_BCRYPT);  

告诉我。

提前致谢。

【问题讨论】:

  • 为什么不想要点;它有什么特别之处以至于你不想要这些点?你不能忽略它,我现在可以告诉你,它会造成严重破坏。
  • 因为我稍后在浏览器中将其用作链接,并且链接末尾有一个点,所以浏览器没有将其放入,奇怪的是
  • 你的问题越来越不清楚了,为什么要用它作为链接?
  • 道歉,例如,如果我想创建这样的链接:$pwdLink = "www.blahhh.co.uk/customer/forgot/resetLink.php?key=".$passHash." ";然后使用哈希使链接唯一,然后将其存储在数据库中。当用户打开具有唯一哈希的链接时,然后在数据库中查找该链接是否仍然有效
  • 我可能会为此使用 md5 或 sha。

标签: php hash bcrypt


【解决方案1】:

看到这是出于验证目的,使用以下内容就足够了:

$code=substr(md5(mt_rand()),0,15);

password_hash() 函数确实创建了一个唯一的字符串,当然,但它并没有像现在这样设计用于验证目的。

还有我不时使用的这个方法:

$token = substr(hash('sha512', mt_rand() . microtime()), 0, 50);

当使用microtime() 时,这将创建一个更长、更精确的令牌。

免责声明:这是用于随机令牌生成,与密码哈希无关。

【讨论】:

  • 正是我需要的,已经使用了 $token = substr(hash('sha512', mt_rand() . microtime()), 0, 50);并完美运行。谢谢:)
  • @harry4912 欢迎,很高兴能帮到哈利,干杯
  • @d3L 对我上述评论的补充。 random_bytes() 是 PHP 7 独有的,所以不是每个人都在使用那个版本,也不是所有的 Web 服务器都提供它。只是觉得你和周围的好人可能想知道。
  • @d3L 那很有趣。现在,关于您引用的链接 Generating an unguessable token for confirmation e-mails 提到不要使用 rand()mt_rand() 当然,... 但是, 这是关键。我在两行代码中所拥有的,mt_rand() 并没有单独使用,还有 2-4 个其他函数与它一起使用,并且永远不会被猜测为 mt_rand/rand 生成的字符串。你差点让我在那里。
  • @d3L 您需要撤回您的反对票。我只是想知道为什么您在这样做之前没有三思而后行,恕我直言,这是不必要的。
猜你喜欢
  • 2012-10-12
  • 1970-01-01
  • 2021-01-19
  • 2019-11-03
  • 1970-01-01
  • 2015-12-14
  • 2013-08-29
  • 2020-12-10
  • 1970-01-01
相关资源
最近更新 更多