怎样才能生成这种类型的link?
How can generate this type of link?
我看到一个使用重置密码的网站,该网站向您的电子邮件发送了一个 link 和其他级别的加密,这是 link:
domain.com/dshgfuigt73567345873464783tryweuygyu
什么类型的系统使用什么类型的加密可以得到link那么干净,如何得到dshgfuigt73567345873464783tryweuygyu
有人知道,我花了很多时间在所有类型的加密中搜索 php 和 0 return 我这样的文本。
非常感谢,我的第一个问题!!
这不是加密,它看起来更像 "Token"。当您想重设密码时,网站必须确保您是真实用户。因此它创建了一个唯一的令牌,将其保存在数据库中并通过电子邮件将其发送给您。单击它后,服务器将检查其数据库是否可以找到此令牌。如果它在那里,它将允许密码重置。
在实现方面有很多方法可以实现。最简单的方法是只使用 PHP 的众多随机函数之一。例如 "random_bytes".
像这样:
$myAwesomeToken = random_bytes(20);
print(bin2hex($myAwesomeToken));
由于 random_bytes returns 二进制数据,您将需要 bin2hex 将其转换为人类可读的字符串。结果可以保存在数据库的用户 table 中。您可以使用它来构建 URL 并将其发送给用户。
可在此处找到有关该功能的更多信息:
https://www.php.net/manual/en/function.random-bytes.php
保存发送重置邮件的日期时间通常也是一个好主意。然后您可以在特定时间后使其无效。只是一个小小的提示。 :)
它不是加密(因为它无法解密*)它是一个散列。特别是,它有 43 个字母数字字符,这大致意味着它的二进制表示量为 256 位。 (所以,32 字节)。因此,我会说它是 SHA-256,但它也可能是由 "roll your own" 算法制成的虚假字符串。
当您尝试恢复密码时,会生成一个随机哈希值并通过电子邮件发送给您,通常它会插入 "passwords_resets" table。当您访问该站点时,您在 link 中提供的散列将作为查询字符串参数处理(通过网络服务器重写)。
如果您提供合法的哈希值,您会看到一个可以重置密码的表单(我没有看过您的 link,这只是一个常见的工作流程)。如果记录不在 table 中,或者它显示为已使用,或者它的创建时间早于合理的阈值,那么您将不会看到上述表格。
哈希只是一种生成看似唯一的字符串的方法,因此您无法凭空猜出哈希。现在还有其他方法可以生成这样的字符串,因为自从 SHA256 被认为牢不可破的时代以来,计算能力呈指数级增长。
认为谈论哈希的加密没有意义,您可以尝试找到一个字符串,其哈希与您的问题之一相匹配。同样,只要有足够的计算能力,你最终会的。
(我以为 sha-256 有 44 个字符,但我找不到我从哪里得到这个概念...也许是填充字符?)
我看到一个使用重置密码的网站,该网站向您的电子邮件发送了一个 link 和其他级别的加密,这是 link:
domain.com/dshgfuigt73567345873464783tryweuygyu
什么类型的系统使用什么类型的加密可以得到link那么干净,如何得到dshgfuigt73567345873464783tryweuygyu
有人知道,我花了很多时间在所有类型的加密中搜索 php 和 0 return 我这样的文本。 非常感谢,我的第一个问题!!
这不是加密,它看起来更像 "Token"。当您想重设密码时,网站必须确保您是真实用户。因此它创建了一个唯一的令牌,将其保存在数据库中并通过电子邮件将其发送给您。单击它后,服务器将检查其数据库是否可以找到此令牌。如果它在那里,它将允许密码重置。
在实现方面有很多方法可以实现。最简单的方法是只使用 PHP 的众多随机函数之一。例如 "random_bytes".
像这样:
$myAwesomeToken = random_bytes(20);
print(bin2hex($myAwesomeToken));
由于 random_bytes returns 二进制数据,您将需要 bin2hex 将其转换为人类可读的字符串。结果可以保存在数据库的用户 table 中。您可以使用它来构建 URL 并将其发送给用户。
可在此处找到有关该功能的更多信息:
https://www.php.net/manual/en/function.random-bytes.php
保存发送重置邮件的日期时间通常也是一个好主意。然后您可以在特定时间后使其无效。只是一个小小的提示。 :)
它不是加密(因为它无法解密*)它是一个散列。特别是,它有 43 个字母数字字符,这大致意味着它的二进制表示量为 256 位。 (所以,32 字节)。因此,我会说它是 SHA-256,但它也可能是由 "roll your own" 算法制成的虚假字符串。
当您尝试恢复密码时,会生成一个随机哈希值并通过电子邮件发送给您,通常它会插入 "passwords_resets" table。当您访问该站点时,您在 link 中提供的散列将作为查询字符串参数处理(通过网络服务器重写)。
如果您提供合法的哈希值,您会看到一个可以重置密码的表单(我没有看过您的 link,这只是一个常见的工作流程)。如果记录不在 table 中,或者它显示为已使用,或者它的创建时间早于合理的阈值,那么您将不会看到上述表格。
哈希只是一种生成看似唯一的字符串的方法,因此您无法凭空猜出哈希。现在还有其他方法可以生成这样的字符串,因为自从 SHA256 被认为牢不可破的时代以来,计算能力呈指数级增长。
认为谈论哈希的加密没有意义,您可以尝试找到一个字符串,其哈希与您的问题之一相匹配。同样,只要有足够的计算能力,你最终会的。
(我以为 sha-256 有 44 个字符,但我找不到我从哪里得到这个概念...也许是填充字符?)