0

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

谢谢

4

3 回答 3

2

它们完全不同——SHA1是一种单向哈希函数,这意味着您不能从编码字符串返回到原始字符串。但是,base64_encode它是一种双向编码功能,这意味着您可以使用base64_decode.

安全方面,这意味着任何获得base64_encoded 值的人都可以轻松解码它,而SHA1值需要蛮力和大量时间。

于 2013-03-12T17:03:50.240 回答
2

您可以放弃甚至对字符串进行编码/散列的想法,并使用openssl_random_pseudo_bytes生成一个字符串,然后使用它。

echo bin2hex(openssl_random_pseudo_bytes(10));

示例输出:

root@upstairslinux:/var/www# php openssl.php
67b206be9ceef1c4974f

root@upstairslinux:/var/www#
于 2013-03-12T17:07:11.130 回答
1

您正在生成一串随机字符。没有一种编码或散列可能会给您带来任何好处。

sha1将使字符串更短,并使其(非常非常轻微地)更容易猜测所需的字符串。

base64将使字符串更长,并且更容易使自动换行会破坏您将其注入的任何 URL。

于 2013-03-12T17:05:45.160 回答