我目前正在构建一个基本的身份验证系统,我有一个用户激活功能,它生成一个20个字符长的字符串并将其编码为sha1
,但我看到其他一些系统使用base64_encode
可以请有人解释什么更好,为什么?
谢谢
答案 0 :(得分:2)
它们完全不同 - SHA1
是单向散列函数,这意味着您无法从编码字符串返回到原始字符串。但是,base64_encode
是双向编码函数,这意味着您可以使用base64_decode
返回原始值。
安全方面,这意味着任何掌握base64_encode
d值的人都可以轻松解码它,而SHA1
值则需要蛮力和大量时间。
答案 1 :(得分:2)
您可以废弃甚至编码/散列字符串的想法,并使用openssl_random_pseudo_bytes生成字符串然后使用它。
echo bin2hex(openssl_random_pseudo_bytes(10));
示例输出:
root@upstairslinux:/var/www# php openssl.php
67b206be9ceef1c4974f
root@upstairslinux:/var/www#
答案 2 :(得分:1)
您正在生成一串随机字符。没有任何编码或散列可能会给您带来任何好处。
sha1
会缩短字符串的长度并使其(非常轻微地)更容易猜到所需的字符串。
base64
会使字符串变长,并使wordwrapping更有可能破坏您注入的任何网址。