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

标签 php mysql url encryption hash

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

但是,我不太确定要使用哪种加密/散列方法。对于本网站管理系统的登录,我在数据库中使用 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/

相关文章:

php - Laravel 将多选下拉值获取到 Controller

php - 如何将字符串与变量连接起来并将其用作另一个变量?

mysql - 从 django app docker 连接到本地 mysql 数据库

javascript - 如何向 URL 添加参数?

android - 为什么android不处理路径中有#的深层链接url

php - 如何知道一个函数是否被第一次调用

php - 删除一行 SQL PHP 后的组织表

php - laravel 查询生成器中的错误

MySQL - 三个月内至少购买过一次的客户

Swift - 从服务器上的特定文件夹/远程 URL 中获取所有文件