哪个是激活散列,sha1或base64_encode的更好编码

时间:2013-03-12 17:02:14

标签: php base64 sha1

我目前正在构建一个基本的身份验证系统,我有一个用户激活功能,它生成一个20个字符长的字符串并将其编码为sha1,但我看到其他一些系统使用base64_encode可以请有人解释什么更好,为什么?

谢谢

3 个答案:

答案 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更有可能破坏您注入的任何网址。