Phi*_*ung 4 php mysql encryption url hash
我有一个需要生成的链接,以便它可以放在电子邮件中.当用户点击此链接时,系统意味着将电子邮件中发送的代码与用户匹配,因此它可以为该用户提取记录.
但是,我不太确定使用哪种加密/散列方法.对于登录在本网站管理员系统中,我使用PBKDF2在数据库中的密码(盐析)和AES加密,当它被发送到会话变量,但我不知道如果PBKDF2和AES中使用的字符是url兼容的.
基本上,我需要散列/生成随机代码以存储在数据库中的最佳方法和加密方法,以便我可以将一年和代码(我之前提到的)放在一个URL中.如果有帮助,我正在使用PHP和MySQL.
你们有什么感想?
大多数加密(或散列等)例程的输出是任意二进制数据,如果不对其进行编码,则无法安全地将其包含在URL中.
正如eggyal所说,仅仅使用urlencode()数据就足够了.但是,标准URL编码可能不是编码随机二进制数据的最紧凑方式. Base64编码效率会更高,但遗憾的是由于使用了该+字符,因此不完全是URL安全的.
幸运的是,存在base64编码的标准化URL安全变体,在RFC 4648中指定为"base64url".这里有一对函数用于在PHP中使用这种编码对数据进行编码和解码,基于"gutzmer at usa dot net"的回答:
function base64url_encode($data) {
return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}
function base64url_decode($data) {
return base64_decode(strtr($data, '-_', '+/'));
}
Run Code Online (Sandbox Code Playgroud)
(我已经简化了解码功能,因为至少PHP的当前版本显然不需要=输入中的填充字符base64_decode().)
PS.为了首先安全地生成随机令牌,请参阅此问题.