【发布时间】:2017-03-15 22:09:30
【问题描述】:
要为密码重置或电子邮件激活生成安全的 URL 安全哈希,以下应用程序中的 bin2hex 或 base64_encode 哪个功能更安全?
1.生成令牌(使用其中之一):
$token = bin2hex(openssl_random_pseudo_bytes(32));
$token = strtr(base64_encode(openssl_random_pseudo_bytes(64)), "+/=", "XXX");
2。存储在数据库中:
$token_hash = password_hash($token, PASSWORD_BCRYPT);
INSERT INTO hash_table SET token_hash='$token_hash', series='X'
3.验证令牌:
SELECT token_hash FROM hash_table WHERE series='X'
if (password_verify($hash_from_url,$token_hash)) {
// Success
}
我注意到当 $hash_from_url 超过 72 个字符时,它不再有任何区别。
但是使用 base64 来获取 61 个不同的字符而不是使用 16 个不同的 bin2hex 会更好吗,假设我使用更多的随机字节,对于同样长的字符串,即长度为 72 个字符?
【问题讨论】:
标签: hash passwords hex base64 password-encryption