1

そのため、ハッシュ関数への入力として文字列を使用して UUID を生成する必要があります。

私が理解しているように、MS の GUID の実装はエンディアン ポータブルではないため、RFC 4122 を正しく実装していません。したがって、.NET System.Security.Cryptography.SHA1Managed().ComputeHash(data) 関数に UTF-8 文字列を渡すことで、基本的に同じ落とし穴に陥っているのではないかと思っています。

ウィキペディアはUTF-8ではバイトオーダーは重要ではないと示しているようで、バイトオーダーマークは基本的に文字列がUTF-8であることを示すヘッダーに格下げされているので、私は大丈夫だと思います。

編集:UUIDで使用されるハッシュのシードとしてUTF-8文字列を使用しようとしていることに注意してください。

4

2 に答える 2

5

Arrays of bytes do not have an endian problem. Everybody agrees that the first element in the array has the lowest address, regardless of the machine architecture. A Guid is not an array of bytes, it is a struct that has fields that are not a byte. And is thus sensitive to endian order.

A utf-8 encoded string is a byte[]. ComputeHash() takes a byte[]. They are therefore not sensitive to endianness.

于 2013-02-01T21:55:27.667 に答える
2

UTF8 には複数のバイト オーダーはありません。
代わりに、UTF8 仕様は、非 ASCII 文字のエンコードに使用されるバイト順を正確に定義しています。

ただし、任意のハッシュを UTF8 として解析することはできません。

于 2013-02-01T21:32:50.543 に答える