我有一个需要产生的,以便它可以被放置在电子邮件中的链接。 当用户点击该链接,系统是为了匹配电子邮件给用户发送的代码,因此它可以拉起记录该用户。
但是,我不知道如何使用的加密/散列方法。 对于登录在本网站管理员系统中,我使用PBKDF2在数据库中的密码(盐析)和AES加密,当它被发送到会话变量,但我不知道如果PBKDF2和AES中使用的字符是网址兼容。
基本上,我需要散列的最佳方法/生成在数据库中用于存储的随机码和加密方法,使得我可以在网址放置一年(我先前提到的)的代码。 我使用PHP和MySQL是否有帮助。
你们有什么感想?
的大多数加密(或散列等)例程的输出是任意的二进制数据,这是不能被安全地包含在URL而不对其进行编码。
作为eggyal笔记 ,只需使用urlencode()
上的数据应该是足够的。 然而,URL编码标准可能不编码随机二进制数据的最简洁的方式。 的Base64编码效率会比较高,但不幸的是,没有完全网址安全,因为它使用的+
字符。
幸运的是,存在的base64编码的标准化网址安全的变体,在指定的RFC 4648为“base64url”。 这里有一对使用这种编码在PHP中,数据编码和解码功能, 在此基础上通过回答“美国在斑点古兹曼网” :
function base64url_encode($data) {
return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}
function base64url_decode($data) {
return base64_decode(strtr($data, '-_', '+/'));
}
(我已经简化解码功能位,因为PHP的至少当前版本显然不需要=
填充字符在输入到base64_decode()
PS。 为了在第一时间安全地生成随机令牌,例如见这个问题 。
但是执行你想散,然后urlencode()
将其插入网址之前的结果。