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

时间:2012-05-09 09:10:57

标签: php mysql url encryption hash

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

但是,我不太确定使用哪种加密/散列方法。对于此站点上管理系统的登录,我在数据库中使用PBKDF2作为密码(带有salting)和AES加密,当它被发送到会话变量时,但我不知道PBKDF2& AES与网址兼容。

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

你们有什么想法?

2 个答案:

答案 0 :(得分:7)

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

As eggyal notes,只需在数据上使用urlencode()即可。但是,标准URL编码可能不是编码随机二进制数据的最紧凑方式。 Base64编码效率更高,但遗憾的是,由于使用了+字符,因此不具备完全网址安全性。

幸运的是,存在base64编码的标准化URL安全变体,在RFC 4648中指定为“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()填充字符。)


聚苯乙烯。为了首先安全地生成随机令牌,请参阅例如this question

答案 1 :(得分:5)

按照您的意愿执行哈希,然后在将结果插入URL之前urlencode()结果。