gpt4 book ai didi

vb.net - MurmurHash3 测试向量

转载 作者:行者123 更新时间:2023-12-02 07:09:21 24 4
gpt4 key购买 nike

我正在尝试移植 C# implementation of MurmurHash3到 VB.Net。

它运行...但是有人可以向我提供一些已知的测试向量来验证正确性吗?

  • 已知字符串文本
  • 种子值(value)
  • MurmurHash3 结果

提前致谢。

编辑:我将实现限制为仅 32 位 MurmurHash3,但如果您还可以为 64 位实现提供向量,也会很好。

最佳答案

我终于开始创建 MurMur3 实现,并且成功翻译了 SMHasher 测试代码。我的实现给出了与 SMHasher 测试相同的结果。这意味着我终于可以给出一些有用的、并且被认为是正确的测试向量。

这仅适用于 Murmur3_x86_32

| Input        | Seed       | Expected   |
|--------------|------------|------------|
| (no bytes) | 0 | 0 | with zero data and zero seed, everything becomes zero
| (no bytes) | 1 | 0x514E28B7 | ignores nearly all the math
| (no bytes) | 0xffffffff | 0x81F16F39 | make sure your seed uses unsigned 32-bit math
| FF FF FF FF | 0 | 0x76293B50 | make sure 4-byte chunks use unsigned math
| 21 43 65 87 | 0 | 0xF55B516B | Endian order. UInt32 should end up as 0x87654321
| 21 43 65 87 | 0x5082EDEE | 0x2362F9DE | Special seed value eliminates initial key with xor
| 21 43 65 | 0 | 0x7E4A8634 | Only three bytes. Should end up as 0x654321
| 21 43 | 0 | 0xA0F7B07A | Only two bytes. Should end up as 0x4321
| 21 | 0 | 0x72661CF4 | Only one byte. Should end up as 0x21
| 00 00 00 00 | 0 | 0x2362F9DE | Make sure compiler doesn't see zero and convert to null
| 00 00 00 | 0 | 0x85F0B427 |
| 00 00 | 0 | 0x30F4C306 |
| 00 | 0 | 0x514E28B7 |

对于那些将要移植到没有实际数组的语言的人,我还有一些基于字符串的测试。对于这些测试:

  • 所有字符串均假定为 UTF-8 编码
  • 并且不包含任何空终止符

我会将这些保留为代码形式:

TestString("", 0, 0); //empty string with zero seed should give zero
TestString("", 1, 0x514E28B7);
TestString("", 0xffffffff, 0x81F16F39); //make sure seed value is handled unsigned
TestString("\0\0\0\0", 0, 0x2362F9DE); //make sure we handle embedded nulls


TestString("aaaa", 0x9747b28c, 0x5A97808A); //one full chunk
TestString("aaa", 0x9747b28c, 0x283E0130); //three characters
TestString("aa", 0x9747b28c, 0x5D211726); //two characters
TestString("a", 0x9747b28c, 0x7FA09EA6); //one character

//Endian order within the chunks
TestString("abcd", 0x9747b28c, 0xF0478627); //one full chunk
TestString("abc", 0x9747b28c, 0xC84A62DD);
TestString("ab", 0x9747b28c, 0x74875592);
TestString("a", 0x9747b28c, 0x7FA09EA6);

TestString("Hello, world!", 0x9747b28c, 0x24884CBA);

//Make sure you handle UTF-8 high characters. A bcrypt implementation messed this up
TestString("ππππππππ", 0x9747b28c, 0xD58063C1); //U+03C0: Greek Small Letter Pi

//String of 256 characters.
//Make sure you don't store string lengths in a char, and overflow at 255 bytes (as OpenBSD's canonical BCrypt implementation did)
TestString(StringOfChar("a", 256), 0x9747b28c, 0x37405BDC);

我将仅发布我转换为 Murmur3 的 11 个 SHA-2 测试向量中的两个。

TestString("abc", 0, 0xB3DD93FA);
TestString("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 0, 0xEE925B90);

最后,重要的一点:

  • 关键: “敏捷的棕色狐狸跳过了懒狗”
  • 种子: 0x9747b28c
  • 哈希:0x2FA826CD

如果其他人可以从其实现中确认任何/所有这些向量。

同样,这些测试向量来自通过 KeySetTest.cpp - VerificationTest(...) 的 SMHasher 256 迭代循环测试的实现。 .

这些测试来 self 在 Delphi 中的实现。我还在 Lua 中创建了一个实现(它对数组的支持并不大)。

Note: Any code released into public domain. No attribution required.

关于vb.net - MurmurHash3 测试向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14747343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com