1

所以我需要生成一个带有字符串的 UUID 作为哈希函数的输入。

据我了解,MS 的 GUID 实现不是字节序可移植的,因此没有正确实现 RFC 4122。所以我想知道通过将 .NET System.Security.Cryptography.SHA1Managed().ComputeHash(data) 函数传递一个 UTF-8 字符串,我是否落入了基本相同的陷阱。

我相信我很好,因为维基百科似乎表明字节顺序对 UTF-8 无关紧要,并且字节顺序标记本质上被降级为标头,以表示字符串采用 UTF-8 格式。

编辑:注意我正在尝试使用 UTF-8 字符串作为 UUID 中使用的哈希的种子。

4

2 回答 2

5

字节数组没有字节序问题。每个人都同意数组中的第一个元素具有最低地址,无论机器架构如何。Guid 不是字节数组,它是具有非字节字段的结构。因此对字节序很敏感。

一个 utf-8 编码的字符串是一个 byte[]。ComputeHash() 需要一个字节[]。因此,它们对字节顺序不敏感。

于 2013-02-01T21:55:27.667 回答
2

UTF8 没有多字节顺序。
相反,UTF8 规范精确定义了用于编码非 ASCII 字符的字节顺序。

但是,您不能将任意散列解析为 UTF8。

于 2013-02-01T21:32:50.543 回答