gpt4 book ai didi

php - 散列或加密要在 url 中发送的变量

转载 作者:可可西里 更新时间:2023-11-01 07:13:46 25 4
gpt4 key购买 nike

我有一个需要生成的链接,以便可以将其放入电子邮件中。当用户点击此链接时,系统会匹配电子邮件中发送给用户的代码,以便提取该用户的记录。

但是,我不太确定要使用哪种加密/散列方法。对于本网站管理系统的登录,我在数据库中使用 PBKDF2 作为密码(加盐),并在发送到 session 变量时使用 AES 加密,但我不知道 PBKDF2 和 AES 使用的字符是否是 url 兼容的。

基本上,我需要散列/生成随机代码以存储在数据库中的最佳方法和加密方法,以便我可以将年份和代码(我之前提到过)放在 url 中。如果有帮助,我正在使用 PHP 和 MySQL。

大家怎么看?

最佳答案

大多数加密(或散列等)例程的输出是任意二进制数据,如果不对其进行编码,则无法安全地将其包含在 URL 中。

As eggyal notes ,只需对数据使用 urlencode() 就足够了。然而,标准的 URL 编码可能不是编码随机二进制数据的最紧凑的方式。 Base64编码会更有效,但不幸的是,由于使用了 + 字符,因此不完全是 URL 安全的。

幸运的是,在 RFC 4648 中指定了 base64 编码的标准化 URL 安全变体。作为“base64url”。这是在 PHP 中使用此编码对数据进行编码和解码的一对函数,based on this answer by "gutzmer at usa dot net" :

function base64url_encode($data) {
return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}

function base64url_decode($data) {
return base64_decode(strtr($data, '-_', '+/'));
}

(我稍微简化了解码函数,因为至少当前版本的 PHP 显然不需要在 base64_decode() 的输入中使用 = 填充字符.)


附言。为了首先安全地生成随机 token ,请参见例如this question .

关于php - 散列或加密要在 url 中发送的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10513035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com