【问题标题】:Do the SHA1 of a string always return ASCII characters?字符串的 SHA1 是否总是返回 ASCII 字符?
【发布时间】:2011-06-30 02:52:10
【问题描述】:

输入字符串可以是unicode字符串。计算SHA1后的输出字符串会一直返回ASCII字符吗?

【问题讨论】:

    标签: sha1


    【解决方案1】:

    这取决于但严格来说,不。 SHA-1 哈希的输出是 160 位或 20 个字节,但不保证字节在 ASCII 范围内。

    但是,一些散列函数输出 20 个字节的十六进制等效值(即 40 个字符),因此如果实际散列的前三个字节是 0x7e、0x03 和 0xb2,则输出将以“7e03b2”开头,在在这种情况下输出是 ASCII。

    【讨论】:

      【解决方案2】:

      SHA1 返回 20 个字节。 SHA1 不处理编码、文本、ASCII 等。

      表示二进制数据的一种常用方法是将其编码为十六进制 - 在这种情况下,输出始终为 [a-f][0-9]

      【讨论】:

        【解决方案3】:

        sha1 返回一个二进制字符串。为方便起见,某些 sha1 函数可能还会将该二进制字符串编码为十六进制或 base64 - 如果是这样,结果将是 ASCII 字符。但 sha1 本身不返回 ASCII。

        【讨论】:

        • 为了说明这一点,SHA1 返回一个(大)数字。有些人选择将该数字表示为一串十六进制字符。但是,如果您调用具有 SHA1 函数的库,则不必期望它会返回一个 ASCII 字符串。始终为 RTFM。
        猜你喜欢
        • 2015-04-22
        • 1970-01-01
        • 2016-12-16
        • 2019-07-25
        • 1970-01-01
        • 2013-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多