【问题标题】:SHA-1 and UnicodeSHA-1 和 Unicode
【发布时间】:2010-04-06 02:12:20
【问题描述】:

是否为 Unicode 字符串定义了 SHA-1 算法的行为?我确实意识到 SHA-1 本身并不关心字符串的内容,但是,
在我看来,为了通过 SHA-1 的标准测试,输入字符串应该使用 UTF-8 编码。

【问题讨论】:

    标签: unicode character-encoding hash sha1


    【解决方案1】:

    SHA-1 基于字节;它不关心数据的结构。如果你给它一堆由 Unicode 字符串组成的字节,你会得到一个结果。请记住,块大小为 512 位,因此较小的数据量可能会导致安全问题。

    【讨论】:

    • 我也明白。但是,如果我尝试使用“abc”通过测试,然后给它以 UTF-16 编码的“abc”字符串呢?它永远不会通过它。这就是问题存在的原因。
    • 当然不行。 SHA-1 比较数据而不考虑结构。您必须将苹果与苹果进行比较。
    • 所以当谈到要放入 SHA-1 算法的 Unicode 字符串时,您会将什么定义为苹果? :)
    • 如果将其与相同的 Unicode 字符串(以相同方式编码)进行比较,则哈希值将匹配。如果将其与以其他方式编码的字符串进行比较,则哈希将不匹配。这就是所有安全散列所做的,真的;它们向您显示数据是相同还是不同。将 Unicode 与 UTF-8 字符串进行比较会产生不同的哈希值,因为它们包含不同的数据。这就是想要的结果。 如何编码并不重要,只要每次散列时都以相同的方式进行。
    • 仅包含 ASCII 字符的 UTF-8 编码字符串的哈希值将与等效的纯 ASCII char[] 字符串的哈希值匹配(与 memcmp 相同)。否则,您必须在 UTF-16、UTF-16LE、UTF-16BE、UCS-4 之间进行选择...除非您打算共享这些哈希,否则我会将字符串保留为默认编码
    猜你喜欢
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 2023-03-12
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多