【问题标题】:Which is better encodeing for activation hash, sha1 or base64_encode [closed]激活哈希、sha1 或 base64_encode 哪种编码更好[关闭]
【发布时间】:2013-03-12 17:02:14
【问题描述】:

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

谢谢

【问题讨论】:

  • “20 个字符的长字符串”中有哪些数据?如果它只是一个随机字符串,那么除了长度之外没有任何区别,并且仅使用 20 个字符的字符串没有真正的区别/安全性。

标签: php base64 sha1


【解决方案1】:

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

echo bin2hex(openssl_random_pseudo_bytes(10));

示例输出:

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

root@upstairslinux:/var/www#

【讨论】:

  • 你刚刚给了我一个好主意,并确认了一些我不确定的事情,谢谢
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

    • sha1 是 40 个字符,不短于 20 个。base64 的大小比原始字符串平均增加了 33%。
    猜你喜欢
    • 2013-06-17
    • 2014-04-17
    • 2010-09-28
    • 2013-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    相关资源
    最近更新 更多