【问题标题】:How can generate this type of link?怎样才能生成这种类型的链接?
【发布时间】:2020-04-08 17:25:13
【问题描述】:

我看到一个使用重置密码的网站,该网站向您的电子邮件发送了一个链接,该链接具有其他级别的加密,这是链接:

domain.com/dshgfuigt73567345873464783tryweuygyu

什么类型的系统用什么类型的加密可以得到这么干净的链接,怎么得到dshgfuigt73567345873464783tryweuygyu

有人知道,我在所有类型的加密中搜索 php 和 0 都给我返回了这样的文本。 高级谢谢,我的第一个问题!

【问题讨论】:

  • 我猜没有加密,只是随机生成的字符串/UUID?

标签: php url encryption clean-urls


【解决方案1】:

这不是加密,而是看起来像“令牌”。当您要重置密码时,网站必须确保您是真实用户。因此它会创建一个唯一的令牌,将其保存在数据库中并通过电子邮件将其发送给您。单击它后,服务器将检查其数据库是否可以找到此令牌。如果存在,它将允许密码重置。

在实现方面,有很多方法可以实现这一点。最简单的方法是只使用 PHP 的众多随机函数之一。例如“random_bytes”。

像这样:

$myAwesomeToken = random_bytes(20);
print(bin2hex($myAwesomeToken));

由于 random_bytes 返回二进制数据,您需要 bin2hex 将其转换为人类可读的字符串。结果可以保存在数据库的用户表中。您可以使用它来构建 URL 并将其发送给用户。

可以在此处找到有关该功能的更多信息:

https://www.php.net/manual/en/function.random-bytes.php

保存发送重置邮件时的日期时间通常也是一个好主意。然后,您可以在特定时间后使其无效。只是一个小提示。 :)

【讨论】:

  • 谢谢,这是晚餐帮助;D
【解决方案2】:

这不是加密(因为它不能被解密*)它是一个哈希。特别是,它有 43 个字母数字字符,这大致意味着它的二进制表示量为 256 位。 (所以,32 个字节)。因此,我会说它是 SHA-256,但它也可能是由“自己滚动”算法制成的虚假字符串。

当您尝试恢复密码时,系统会生成一个随机哈希值并通过电子邮件发送给您,并且通常会将其插入“passwords_resets”表中。当您访问该站点时,您在链接中提供的哈希值将被处理(通过网络服务器重写)作为查询字符串参数。

如果您提供合法的哈希,您会看到一个表单,您可以在其中重置密码(我没有查看您的链接,这只是一个常见的工作流程)。如果记录不在表格中,或者它显示为已使用,或者它的创建时间早于合理的阈值,那么您不会看到该表格。

哈希只是一种生成看似唯一的字符串的方法,因此您无法凭空猜测哈希。现在还有其他方法可以生成这样的字符串,因为自从 SHA256 被认为是牢不可破的时代以来,计算能力呈指数级增长。

认为谈论散列的解密没有意义,您可以尝试查找其散列与您的问题匹配的字符串。同样,只要有足够的计算能力,你最终会的。

(我认为 sha-256 有 44 个字符,但我找不到我从哪里得到这个概念......也许它是一个填充字符?)

【讨论】:

  • 谢谢,这是晚餐帮助;D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多