وظيفة التجزئة | ميجا بايت / ثانية | cycl./hash | cycl./map | مقاس | مشاكل الجودة |
---|---|---|---|---|---|
لا شيء32 | 11149460.06 | 4.00 | - | 13 | البذور السيئة 0، اختبار NOP |
لا شيء64 | 11787676.42 | 4.00 | - | 13 | البذور السيئة 0، اختبار NOP |
لا شيء128 | 11745060.76 | 4.06 | - | 13 | البذور السيئة 0، اختبار NOP |
NOP_OAAT_read64 | 11372846.37 | 14.00 | - | 47 | اختبار رقم |
BadHash | 769.94 | 73.97 | - | 47 | البذور السيئة 0، فشل الاختبار |
سومهاش | 10699.57 | 29.53 | - | 363 | البذور السيئة 0، فشل الاختبار |
sumhash32 | 42877.79 | 23.12 | - | 863 | UB، فشل الاختبار |
multiply_shift | 8026.77 | 26.05 | 226.80 (8) | 345 | البذور السيئة و0xfffffff0، تفشل في معظم الاختبارات |
Pair_multiply_shift | 3716.95 | 40.22 | 186.34 (3) | 609 | يفشل في معظم الاختبارات |
-------------------------- | |||||
CRC32 | 383.12 | 134.21 | 257.50 (11) | 422 | غير آمن، 8590x تصادم، توزيع، PerlinNoise |
md5_32 | 350.53 | 644.31 | 894.12 (10) | 4419 | |
md5_64 | 351.01 | 656.67 | 897.43 (12) | 4419 | |
MD5-128 | 350.89 | 681.88 | 894.03 (13) | 4419 | |
sha1_32 | 353.03 | 1385.80 | 1759.94 (5) | 5126 | العقل، دوري منخفض 32، 36.6٪ توزيع |
sha1_64 | 353.03 | 1385.80 | 1759.94 (5) | 5126 | العقل، دوري منخفض 32، 36.6٪ توزيع |
شا1-160 | 364.95 | 1470.55 | 1794.16 (13) | 5126 | مشط/دوري منخفض32 |
شا2-224 | 147.13 | 1354.81 | 1589.92 (12) | مشط منخفض32 | |
شا2-224_64 | 147.60 | 1360.10 | 1620.93 (13) | دوري منخفض32 | |
شا2-256 | 147.80 | 1374.90 | 1606.06 (16) | ||
شا2-256_64 | 148.01 | 1376.34 | 1624.71 (16) | ||
sha1ni | 1601.21 | 174.16 | 397.28 (6) | 989 | غير آمن، العقل، التقليب، الأصفار، آلة محددة |
sha1ni_32 | 1576.17 | 174.04 | 405.56 (6) | 989 | آلة محددة |
Sha2ni-256 | 1527.38 | 184.35 | 404.40 (4) | 4241 | غير آمن، العقل، التقليب، الأصفار، آلة محددة |
Sha2ni-256_64 | 1501.85 | 186.20 | 407.96 (5) | 4241 | أصفار خاصة بالآلة |
blake3_c | 1288.84 | 357.69 | 582.89 (6) | لا يوجد إمكانية نقل 32 بت | |
rmd128 | 290.90 | 710.49 | 965.55 (6) | ||
rmd160 | 202.16 | 1045.79 | 1287.74 (16) | دوري hi32 | |
rmd256 | 364.81 | 584.86 | 835.02 (11) | ||
edonr224 | 864.69 | 303.42 | 526.94 (6) | ||
edonr256 | 847.85 | 305.79 | 510.01 (4) | ||
blake2s-128 | 295.30 | 698.09 | 1059.24 (51) | ||
blake2s-160 | 215.01 | 1026.74 | 1239.54 (11) | ||
بليك2S-224 | 207.06 | 1063.86 | 1236.50 (20) | ||
بليك2S-256 | 215.28 | 1014.88 | 1230.38 (28) | ||
blake2s-256_64 | 211.52 | 1044.22 | 1228.43 (8) | ||
blake2b-160 | 356.08 | 1236.84 | 1458.15 (12) | ||
بليك2ب-224 | 356.59 | 1228.50 | 1425.87 (16) | ||
بليك2ب-256 | 355.97 | 1232.22 | 1443.31 (19) | ||
blake2b-256_64 | 356.97 | 1222.76 | 1435.03 (9) | ||
com.asconhashv12 | 144.98 | 885.02 | 1324.23 (38) | 4341 | |
asconhashv12_64 | 159.68 | 386.90 | 480.86 (4) | 6490 | |
شا3-256 | 100.58 | 3877.18 | 4159.79 (37) | ضوضاء بيرلين | |
شا3-256_64 | 100.57 | 3909.00 | 4174.63 (16) | ضوضاء بيرلين | |
hasshe2 | 2773.89 | 64.35 | 282.30 (3) | 445 | التقليب، TwoBytes، الأصفار، البذور |
poly_1_mersenne | 1369.21 | 61.59 | 248.86 (4) | 479 | يفشل في معظم الاختبارات |
poly_2_mersenne | 1364.03 | 70.30 | 261.00 (6) | 479 | |
poly_3_mersenne | 1342.82 | 80.22 | 268.79 (2) | 479 | |
poly_4_mersenne | 1343.19 | 89.13 | 277.52 (3) | 479 | |
جدولة32 | 5781.16 | 40.00 | 241.79 (10) | 848 | الاصطدامات |
جدولة | 7875.01 | 39.95 | 249.49 (3) | 554 | |
crc32_hw | 6244.38 | 41.23 | 226.80 (2) | 653 | غير آمن، متحيز بنسبة 100%، تصادمات، توزيع، BIC، خاص بالجهاز (SSE4.2/NEON) |
crc32_hw1 | 7569.29 | 49.07 | 233.75 (3) | 671 | غير آمن، متحيز بنسبة 100%، تصادمات، توزيع، BIC، خاص بالجهاز (x86 SSE4.2) |
crc64_hw | 6143.62 | 40.48 | 223.13 (2) | 652 | غير آمن، متحيز بنسبة 100%، تصادمات، توزيع، BIC، خاص بالجهاز (SSE4.2/NEON) |
crc32_pclmul | - | - | - | غير آمن، متحيز بنسبة 100%، تصادمات، توزيع، BIC، خاص بالجهاز (x86 SSE4.2+PCLMUL) | |
o1hash | 11629440.57 | 18.15 | 199.35 (2) | 101 | غير آمن، لا يوجد بذور، أصفار، يفشل في جميع الاختبارات |
فيبوناتشي | 16878.32 | 22.94 | 803.18 (15) | 1692 | UB، الأصفار، يفشل في جميع الاختبارات |
FNV1a | 760.52 | 73.83 | 254.29 (5) | 204 | بذرة سيئة، أصفار، تفشل في جميع الاختبارات |
FNV1A_Totenschiff | 6274.78 | 26.23 | 251.13 (2) | 270 | UB، الأصفار، يفشل في جميع الاختبارات |
FNV1A_Pippip_Yurii | 6172.14 | 27.55 | 244.80 (2) | 147 | UB، العقل، فشل في جميع الاختبارات |
FNV1a_YT | 13486.49 | 30.50 | 237.43 (4) | 321 | البذرة السيئة، UB، تفشل في جميع الاختبارات |
FNV2 | 6171.60 | 32.20 | 208.59 (4) | 278 | فشل في جميع الاختبارات |
FNV64 | 774.37 | 72.43 | 201.15 (2) | 79 | فشل في جميع الاختبارات |
FNV128 | 390.14 | 136.42 | 289.00 (3) | 171 | فشل في جميع الاختبارات |
k-hash32 | 2230.42 | 53.05 | 264.64 (3) | 808 | غير آمن، أصفار، UB، بذور سيئة، فشل في جميع الاختبارات |
ك-hash64 | 2451.88 | 48.66 | 249.44 (2) | 609 | غير آمن، أصفار، UB، بذور سيئة، فشل في جميع الاختبارات |
فليتشر2 | 15552.61 | 20.61 | 335.31 (3) | 248 | البذور السيئة 0، UB، تفشل في جميع الاختبارات |
فليتشر4 | 15556.93 | 20.60 | 358.60 (3) | 371 | البذور السيئة 0، UB، تفشل في جميع الاختبارات |
برنشتاين | 1045.97 | 58.31 | 225.78 (3) | 41 | البذرة السيئة 0، تفشل في جميع الاختبارات |
com.sdbm | 784.83 | 68.57 | 222.68 (5) | 41 | البذرة السيئة 0، تفشل في جميع الاختبارات |
×17 | 748.75 | 74.13 | 236.00 (10) | 79 | تحيز بنسبة 99.98%، ورسب في جميع الاختبارات |
الحرية | 628.66 | 84.95 | 225.07 (4) | 37 | غير آمن، متحيز بنسبة 100%، فشل في جميع الاختبارات، بذرة سيئة |
دول مجلس التعاون الخليجي | 611.69 | 86.47 | 231.51 (5) | 39 | غير آمن، متحيز بنسبة 100%، فشل في جميع الاختبارات، بذرة سيئة |
جينكينزOOAT | 627.64 | 107.04 | 252.79 (3) | 153 | البذرة السيئة 0، تحيز 53.5%، تفشل في جميع الاختبارات |
جينكينزOOAT_Perl | 608.10 | 94.17 | 254.09 (4) | 65 | البذور السيئة 0، 1.5-11.5% انحياز، 7.2x تصادمات، BIC، LongNeighbors |
ميكروأوات | 701.35 | 76.68 | 251.01 (3) | 68 | 100% انحياز، توزيع، BIC |
بيرسونهاش64 | 434.17 | 124.14 | 230.79 (4) | الانهيار الجليدي، البذور، SSSE3 فقط. MSVC مكسورة | |
بيرسونهاش128 | 434.23 | 121.34 | 221.03 (7) | الانهيار الجليدي، البذور، SSSE3 فقط. MSVC مكسورة | |
بيرسونهاش256 | 444.08 | 119.11 | 229.75 (4) | الانهيار الجليدي، البذور، SSSE3 فقط. MSVC مكسورة | |
VHASH_32 | 13053.40 | 65.84 | 289.86 (3) | 1231 | التعقل، البذور، MomentChi2 |
VHASH_64 | 13465.50 | 63.88 | 286.38 (5) | 1231 | التعقل، البذور، متفرق |
فرش32 | 27038.23 | 66.88 | 278.89 (5) | 944 | غير آمن: الأصفار الملحقة، الاصطدامات + التحيز، MomentChi2، LongNeighbors |
فرش64 | 13829.32 | 112.46 | 332.59 (3) | 944 | غير آمن: الأصفار الملحقة، الاصطدامات + التحيز، MomentChi2، LongNeighbors |
فرش128 | 6878.88 | 233.35 | 384.85 (3) | 944 | غير آمن: الأصفار الملحقة، الاصطدامات+التحيز، التبديل، الجمع، 2 بايت، الأصفار، PerlinNoise |
فرش256 | 3467.37 | 440.40 | 593.57 (5) | 944 | غير آمن: الأصفار الملحقة، الاصطدامات+التحيز، التبديل، الجمع، 2 بايت، الأصفار، PerlinNoise |
jodyhash32 | 1794.34 | 41.12 | 235.12 (4) | 102 | التحيز، الاصطدامات، التوزيع، BIC LongNeighbors |
jodyhash64 | 4813.10 | 40.72 | 239.22 (6) | 118 | التحيز، الاصطدامات، التوزيع، BIC، LongNeighbors |
lookup3 | 2475.35 | 39.65 | 240.10 (3) | 341 | UB، 28% انحياز، تصادمات، 30% توزيع، BIC |
فائق السرعة | 2058.22 | 49.56 | 254.12 (3) | 210 | UB، بذرة سيئة 0، انحياز 91%، تصادمات 5273.01x، توزيع 37%، BIC |
همهمةOAAT | 506.66 | 103.33 | 236.89 (3) | 47 | البذور السيئة 0، الاصطدامات، توزيع 99.998٪، BIC، LongNeighbors |
حماقة8 | 3041.14 | 37.25 | 247.87 (4) | 342 | UB، 2.42% انحياز، تصادمات، 2% توزيع |
نفخة1 | 2027.85 | 48.51 | 253.34 (3) | 358 | UB، 1 بذرة سيئة، 511x تصادمات، Diff، BIC |
تذمر2 | 3089.18 | 41.22 | 238.42 (4) | 358 | UB، 1 بذرة سيئة، 1.7% انحياز، 81x Coll، 1.7% توزيع، BIC |
Murmur2A | 3087.98 | 45.90 | 238.54 (4) | 407 | UB، 1 بذرة سيئة، تحيز 12.7%، LongNeighbors |
تذمر2B | 5919.38 | 38.18 | 215.96 (3) | 433 | UB، 1.8% انحياز، تصادمات، 3.4% توزيع، BIC |
Murmur2C | 3810.98 | 49.09 | 218.51 (3) | 444 | UB، 2^32 بذور سيئة، 91% انحياز، تصادمات، توزيع، BIC، LongNeighbors |
Murmur3A | 2982.67 | 49.08 | 245.78 (4) | 351 | UB، 1 بذرة سيئة، Moment Chi2 69 |
PMurHash32 | 3005.85 | 48.88 | 242.38 (3) | 1862 | 1 بذرة سيئة، لحظة تشي 2 69 |
Murmur3C | 4833.18 | 56.87 | 250.47 (6) | 859 | UB، الجيران الطويلون، النص، DiffDist |
mirhash32low | 6145.39 | 36.95 | 235.09 (4) | 1112 | UB، 4 بذور سيئة، Cyclic، LongNeighbors، خاص بالآلة (يختلف 32/64) |
PMPML_32 | 6639.68 | 45.33 | 257.45 (3) | 1084 | الانهيار الجليدي> 512، غير المصنف: Seed، BIC، MomentChi2، PerlinNoise |
بمبمل_64 | 9833.77 | 50.00 | 251.64 (6) | 1305 | غير المصنفة: البذور، MomentChi2، BIC |
xxHash32 | 5865.17 | 49.20 | 242.74 (3) | 738 | LongNeighbors، الاصطدامات مع فرق 4 بت، MomentChi2 220 |
متروهاش64 | 14741.56 | 39.44 | 215.76 (2) | 624 | يو بي، لونج جيران، بيك |
متروهاش64_1 | 14298.77 | 40.31 | 223.25 (4) | 624 | يو بي، لونج جيران، بيك، مومنت تشي 2 |
Metrohash64crc_1 | 6929.69 | 44.65 | 223.68 (3) | 632 | UB، دوري 8/8 بايت، DiffDist، BIC، MomentChi2، خاص بالجهاز (SSE4.2/NEON) |
Metrohash64crc_2 | 8150.65 | 43.72 | 219.45 (5) | 632 | UB، دوري 8/8 بايت، DiffDist، BIC، خاص بالجهاز (SSE4.2/NEON) |
cmetrohash64_1o | 14921.73 | 38.95 | 213.25 (2) | 3506 | يو بي، لونج جيران، بيك، مومنت تشي 2 |
cmetrohash64_1 | 14151.73 | 40.90 | 211.89 (2) | 652 | يو بي، لونج جيران، بيك، مومنت تشي 2 |
City64noSeed | 14209.19 | 31.80 | 225.90 (5) | 1038 | انهيار ثلجي، متفرق، TwoBytes، MomentChi2، البذور |
مدينة64 | 13887.84 | 46.32 | 239.77 (3) | 1120 | متناثر، TwoBytes |
t1ha1_64le | 13442.64 | 31.41 | 219.58 (3) | 517 | انهيار جليدي |
t1ha1_64be | 11586.02 | 32.74 | 232.55 (3) | 555 | انهيار جليدي |
t1ha0_32le | 7401.21 | 48.27 | 238.99 (3) | 509 | متناثر، طويل الجيران |
t1ha0_32be | 6217.37 | 50.66 | 244.51 (3) | 533 | متناثر، طويل الجيران |
t1ha2_stream | 14011.63 | 80.72 | 275.17 (3) | 1665 | متفرق، التقليب، الجيران طويلة |
t1ha2_stream128 | 13136.06 | 97.80 | 306.11 (7) | 1665 | متفرق، التقليب، الجيران طويلة |
aesnihash | 5579.32 | 56.83 | 258.71 (5) | 1209 | فشل في العديد من الاختبارات الخاصة بالجهاز (x64 AES-NI) |
فلخاش | 50631.69 | 123.02 | 322.14 (7) | 264 | متفرق، LongNeighbors، خاص بالجهاز (x64 AES-NI) |
MeowHash | 29969.40 | 64.96 | 274.29 (4) | 1764 | متناثر، قابل للعكس، خاص بالآلة (x64 AES-NI) |
MeowHash64low | 29485.59 | 65.98 | 278.05 (3) | 1764 | متناثر، قابل للعكس، خاص بالآلة (x64 AES-NI) |
MeowHash32low | 26944.58 | 65.95 | 292.79 (9) | 1764 | متناثر، قابل للعكس، خاص بالآلة (x64 AES-NI) |
-------------------------------------- | |||||
tifuhash_64 | 35.60 | 1679.52 | 1212.75 (15) | 276 | دوري منخفض32 |
floppsyhash | 35.72 | 1868.92 | 1411.07 (7) | 623 | |
com.beamsplitter | 789.22 | 682.45 | 1150.33 (26) | 4203 | يو بي |
ديكوهاش1 | 4131.12 | 199.00 | 398.35 (5) | 1294 | |
ديكوهاش1-128 | 4072.95 | 234.17 | 438.43 (5) | 1294 | |
ديكوهاش2 | 3986.52 | 207.52 | 421.99 (2) | 1294 | |
ديكوهاش2-128 | 4094.73 | 236.61 | 433.35 (4) | 1294 | |
discoNONG | 3698.45 | 399.67 | 597.78 (9) | بذور سيئة | |
com.chaskey | 1143.05 | 113.70 | 294.43 (4) | 1609 | ضوضاء بيرلين |
سيبهاش | 943.53 | 147.15 | 338.74 (4) | 1071 | |
HalfSipHash | 1141.57 | 79.65 | 263.96 (3) | 700 | أصفار |
جيدOAAT | 743.81 | 85.62 | 231.22 (3) | 237 | |
بيرسونباش64 | 1794.83 | 97.80 | 268.90 (8) | 683 | |
بيرسونباش128 | 1691.62 | 104.57 | 272.38 (4) | 1134 | |
بيرسونبهاش256 | 1442.59 | 126.04 | 309.34 (4) | 844 | |
prvhash64_64m | 3077.18 | 47.31 | 241.92 (3) | 349 | |
prvhash64_64 | 3015.08 | 48.03 | 240.64 (3) | 384 | |
prvhash64_128 | 3353.81 | 67.64 | 266.32 (2) | 718 | |
prvhash64s_64 | 6591.34 | 273.50 | 464.65 (3) | 2640 | |
prvhash64s_128 | 6581.40 | 333.83 | 528.07 (5) | 2799 | |
سيبهاش13 | 1812.75 | 106.56 | 310.76 (5) | 778 | 0.9% انحياز |
تسيب | 4233.17 | 53.31 | 249.19 (3) | 519 | !msvc |
com.seahash | 8261.80 | 58.94 | 256.08 (4) | 871 | PerlinNoise، !msvc |
com.seahash32low | 8266.17 | 58.90 | 290.21 (16) | 871 | بيرلين نويز 32, !msvc |
اشتباك | 18703.04 | 70.19 | 282.12 (6) | 1809 | PerlinNoise، خاص بالجهاز (x64 SSE4.2) |
HighwayHash64 | 6242.58 | 99.55 | 248.41 (3) | 2546 | |
Murmur3F | 7623.44 | 52.69 | 221.87 (3) | 699 | يو بي |
ماما | 9563.99 | 34.99 | 228.55 (5) | 1912 | UB، عدد كبير جدًا من البذور السيئة، خاصة بالآلة (يختلف 32/64) |
موملو | 9261.89 | 36.17 | 247.66 (4) | 1912 | UB، 5 بذور سيئة |
xmsx32 | 2039.10 | 46.39 | 249.30 (7) | 192 | 2 بذور سيئة |
mirhash | 6139.07 | 37.02 | 209.47 (3) | 1112 | UB، 2^36 بذور سيئة، LongNeighbors، خاص بالجهاز (يختلف 32/64) |
com.mirhashstrict | 3549.01 | 49.99 | 224.91 (2) | 1112 | |
mirhashstrict32low | 3441.35 | 50.60 | 247.19 (3) | 1112 | 1 بذرة سيئة، MomentChi2 9 |
fasthash32 | 6128.28 | 40.30 | 241.64 (4) | 566 | يو بي |
fasthash64 | 5818.92 | 38.70 | 220.74 (2) | 509 | يو بي |
com.aesni | 31232.34 | 29.21 | 230.14 (4) | 519 | خاص بالجهاز (x64 AES-NI) |
aesni-low | 31221.14 | 29.64 | 226.18 (3) | 519 | خاص بالجهاز (x64 AES-NI) |
mx3 | 9034.90 | 48.71 | 227.89 (2) | 734 | يو بي |
pengyhash | 13428.80 | 74.24 | 275.42 (5) | 421 | |
مدينة32 | 5551.28 | 54.40 | 261.64 (2) | 1319 | |
City64low | 13904.10 | 46.24 | 260.08 (3) | 1120 | |
مدينة128 | 14031.96 | 89.09 | 290.05 (10) | 1841 | |
CityCrc128 | 7916.44 | 55.50 | 240.79 (2) | 295 | |
فارمهاش32 | 21755.58 | 47.54 | 258.35 (3) | 11489 | خاص بالجهاز (x64 SSE4/AVX) |
فارمهاش64 | 12845.53 | 47.11 | 251.58 (3) | 3758 | |
فارمهاش128 | 13913.65 | 70.25 | 263.06 (3) | 163 | |
Farmhash32_c | 21601.86 | 47.38 | 273.00 (3) | 762 | خاص بالجهاز (x64 SSE4/AVX) |
Farmhash64_c | 12834.10 | 47.23 | 246.20 (2) | 3688 | |
Farmhash128_c | 13753.24 | 68.96 | 263.76 (3) | 1890 | |
متروهاش64_2 | 14316.37 | 40.23 | 218.28 (3) | 627 | يو بي، لونج جيران |
cmetrohash64_2 | 14294.26 | 40.76 | 221.40 (4) | 655 | الجيران الطويلين |
metrohash128 | 15634.66 | 73.28 | 261.23 (4) | 773 | يو بي، لونج جيران |
متروهاش128_1 | 15806.97 | 72.30 | 260.90 (4) | 773 | يو بي، لونج جيران |
متروهاش128_2 | 15822.60 | 72.30 | 255.34 (3) | 773 | يو بي، لونج جيران |
Metrohash128crc_1 | 8009.23 | 78.72 | 281.55 (13) | 723 | UB، خاص بالجهاز (SSE4.2/NEON) |
Metrohash128crc_2 | 7878.22 | 79.90 | 275.22 (4) | 723 | UB، خاص بالجهاز (SSE4.2/NEON) |
xxHash64 | 12108.87 | 49.78 | 228.83 (2) | 1999 | |
Spooky32 | 13108.95 | 56.27 | 255.36 (3) | 2221 | يو بي |
Spooky64 | 13529.36 | 58.76 | 236.31 (3) | 2221 | يو بي |
Spooky128 | 11781.35 | 58.91 | 242.91 (3) | 2221 | يو بي |
SpookyV2_32 | 13529.16 | 55.55 | 248.37 (4) | 2069 | |
SpookyV2_64 | 12678.82 | 56.71 | 243.21 (4) | 2069 | |
SpookyV2_128 | 13512.82 | 58.33 | 244.56 (5) | 2069 | |
ahash64 | 9862.62 | 27.32 | 181.68 (1) | 412 | الصدأ |
xxh3 | 21033.55 | 29.48 | 226.77 (4) | 744 | DiffDist بت 7 ث. 36 بت، بيك |
xxh3low | 17093.19 | 30.57 | 242.07 (7) | 756 | |
xxh128 | 18802.16 | 32.37 | 234.30 (4) | 1012 | |
xxh128low | 18833.05 | 32.30 | 234.68 (3) | 1012 | |
t1ha2_tonce | 13854.44 | 37.92 | 233.54 (2) | 541 | صفر منخفض3 |
t1ha2_atonce128 | 14148.42 | 55.70 | 253.74 (6) | 613 | الجيران الطويلين |
t1ha0_aes_noavx | 27231.59 | 37.70 | 236.10 (3) | 925 | LongNeighbors، خاص بالجهاز (x86 AES-NI) |
t1ha0_aes_avx1 | 22714.85 | 48.12 | 226.52 (16) | 843 | LongNeighbors، خاص بالجهاز (x64 AVX.txt) |
t1ha0_aes_avx2 | 56919.46 | 36.70 | 233.14 (2) | 792 | LongNeighbors، خاص بالجهاز (x64 AVX2) |
wyhash32 | 2532.89 | 48.40 | 484.57 (1) | 426 | 4 بذور سيئة ومكسورة، 32 بت |
wyhash32low | 22393.77 | 29.04 | 243.40 (3) | 474 | 5 بذور سيئة |
wyhash | 22540.23 | 28.87 | 236.16 (8) | 474 | |
com.rapidhash | 23789.79 | 22.80 | 138.71 (7) | 574 | |
Rapidhash_unrolled | 23892.88 | 23.41 | 139.47 (12) | 782 | |
umash32 | 21427.57 | 42.12 | 255.55 (5) | 1530 | |
umash32_hi | 21483.12 | 42.65 | 251.09 (4) | 1530 | |
umash64 | 21690.08 | 41.67 | 238.01 (4) | 1530 | |
umash128 | 13211.88 | 43.37 | 237.40 (3) | 1530 | |
halftime_hash64 | 4735.63 | 99.90 | 315.34 (3) | 2911 | |
halftime_hash128 | 17534.53 | 97.97 | 311.10 (4) | 2462 | |
halftime_hash256 | 18003.39 | 99.46 | 315.09 (3) | 2622 | |
halftime_hash512 | 10890.15 | 118.05 | 333.45 (3) | 3550 | |
nmhash32 | 12969.62 | 55.88 | 265.69 (4) | 2445 | |
nmhash32x | 12775.08 | 42.66 | 246.05 (3) | 1494 | |
k-hashv32 | 9181.87 | 52.76 | 245.14 (3) | 1280 | |
ك-hashv64 | 7850.92 | 46.94 | 193.94 (1) | 1279 | |
komihash | 12242.78 | 33.02 | 236.07 (2) | 1323 | |
بوليمور | 9676.33 | 42.70 | 246.53 (3) | 1128 |
متغيرات الجدول القابلة للفرز:
الافتراضي AMD Ryzen 5 3350G 3.6 جيجا هرتز
إنتل i5-2300 2.8 جيجا هرتز
إنتل i5-2300 2.8 جيجا هرتز 32 بت
ايه ام دي رايزن 3 3200U 3.5 جيجا هرتز
ماك اير i7-4650
Cortex-A53 بسرعة 2 جيجا هرتز (سوني إكسبيريا L4)
لقد أضفت بعض التجزئات المدعومة بـ SSE ومتغيرات Intel/arm CRC32-C وAES وSHA HW السريعة. راجع أيضًا https://github.com/aappleby/smhasher/wiki القديم، والشوكة المحسنة ولكن غير الخاضعة للصيانة https://github.com/demerphq/smhasher، والإصدار المحسن الجديد SMHasher3 https://gitlab.com/ fwojcik/smhasher3.
لذا فإن أسرع وظائف التجزئة على x86_64 دون مشاكل في الجودة هي:
Rapidhash (wyhash محسّن)
xxh3low
wyhash
أوماش (حتى عالمي!)
ahash64
t1ha2_tonce
komihash
FarmHash ( غير محمول، خاص بالجهاز أيضًا: 64 مقابل 32 بت، دول مجلس التعاون الخليجي القديمة، ... )
halftime_hash128
Spooky32
pengyhash
nmhash32
mx3
MUM/mir ( نتائج مختلفة على أقواس 32/64 بت، الكثير من البذور السيئة التي يجب تصفيتها )
fasthash32
عادةً ما تستخدم وظائف التجزئة لجداول الرموز أو جداول التجزئة تجزئة 32 بت، ولقواعد البيانات وأنظمة الملفات والمجاميع الاختبارية للملفات عادةً 64 أو 128 بت، بالنسبة للتشفير الذي يبدأ الآن بـ 256 بت.
متوسط حجم المفتاح النموذجي في Perl5 هو 20، والأكثر شيوعًا هو 4. وهو مماثل لجميع اللغات الديناميكية الأخرى. راجع github.com/rurban/Perl-hash-stats
عند استخدامها في جدول التجزئة، عادةً ما تتفوق ذاكرة التخزين المؤقت للتعليمات على وحدة المعالجة المركزية والإنتاجية المقاسة هنا. في اختباراتي، يتفوق أصغر FNV1A
على أسرع crc32_hw1
مع جداول التجزئة Perl 5. حتى لو كانت وظائف التجزئة الأسوأ هذه ستؤدي إلى المزيد من الاصطدامات، فإن ميزة السرعة الإجمالية والقدرة المضمنة تتفوق على الجودة الأسوأ قليلاً. انظر على سبيل المثال تحليل سبعة الأبعاد لأساليب التجزئة وتأثيراتها على معالجة الاستعلام للحصول على نظرة عامة موجزة عن أفضل استراتيجيات جدول التجزئة، مما يؤكد أن أبسط تجزئة متعددة (bernstein، FNV*، x17، sdbm) تتفوق دائمًا على وظائف التجزئة "الأفضل" (التبويب، الهمهمة، المزرعة، ...) عند استخدامها في جدول التجزئة.
يوصى باستخدام وظائف التجزئة السريعة التي تم اختبارها هنا بنفس السرعة لملخصات الملفات وربما قواعد البيانات الأكبر، ولكن ليس لجداول التجزئة 32 بت. تؤدي "مشاكل الجودة" إلى توزيع أقل اتساقًا، أي مزيد من التصادمات وأداء أسوأ، ولكنها نادرًا ما ترتبط بهجمات أمنية حقيقية، فقط اختبار التعقل الثاني AppendZeroes ضد �
هو ذو صلة بالأمن.
MiB/sec: متوسط اختبار سرعة المفتاح المجمع للمحاذاة من 0 إلى 7 مع مفاتيح بحجم 262144 بايت. كلما كان ذلك أفضل.
cycl./hash: متوسط اختبار سرعة المفتاح الصغير لمفاتيح من 1 إلى 31 بايت. أصغر كلما كان ذلك أفضل.
cycl./map: نتيجة اختبار Hashmap لـ /usr/dict/words باستخدام hashmap السريع لـ C++، تحصل على استعلامات، مع الانحراف المعياري بين قوسين. هذا يختبر عدم قابلية وظيفة التجزئة عمليًا (انظر الحجم). أصغر كلما كان ذلك أفضل.
الحجم: حجم الكائن بالبايت على AMD64. يؤثر هذا على الاستحالة في جداول التجزئة على سبيل المثال. أصغر كلما كان ذلك أفضل.
مشاكل الجودة: راجع حالات الفشل في المستند المرتبط. كلما كان ذلك أفضل.
https://github.com/martinus/better-faster-stronger-mixer الخلاطات. وفي مدونته أفضل معايير التجزئة لـ C ++.
http://nohatcoder.dk/2019-05-19-1.html يعطي تصنيفًا جديدًا ومفيدًا لمستوى التجزئة 1-5.
http://www.strchr.com/hash_functions يسرد المعايير الأخرى وجودة معظم وظائف التجزئة البسيطة والسريعة.
يسرد http://bench.cr.yp.to/primitives-hash.html معايير جميع التجزئة الآمنة التي تم اختبارها حاليًا.
http://valerieaurora.org/hash.html عمر وظائف تجزئة التشفير
لم يتم تضمين هجمات جدول التجزئة الموصوفة في SipHash ضد City أو Murmur أو Perl JenkinsOAAT أو Hash Function Lounge هنا. ندرج بعض الهجمات المعروفة في GH #186.
لا يمكن أن يكون تجنب الهجوم هذا مشكلة في وظيفة التجزئة، ولكن فقط في نظام حل تصادم جدول التجزئة. يمكنك مهاجمة كل وظيفة تجزئة، حتى الأفضل والأكثر أمانًا إذا اكتشفت البذرة، على سبيل المثال من ميزات اللغة (الخطأ) وهجمات القناة الجانبية وتوقيت التصادم وترتيب الفرز بشكل مستقل، لذلك تحتاج إلى حماية التصادم الخاص بك مخطط التعامل مع الحالة الأسوأ O(n)، أي تسلسل منفصل مع قوائم مرتبطة. يسمح تسلسل القوائم المرتبطة بعوامل تحميل عالية، ولكنه غير ملائم لذاكرة التخزين المؤقت. نظام القائمة المرتبطة الوحيد الموصى به هو تضمين المفتاح أو التجزئة في المصفوفة. في الوقت الحاضر، يستخدم الجميع عنونة سريعة الفتح، حتى لو كان عامل التحميل يجب أن يكون ~50%، إلا إذا كنت تستخدم Cuckoo Hashing.
على سبيل المثال، فإن استخدام SipHash لجدول التجزئة الخاص بهم في Python 3.4، وRuby، وRust، وsystemd، وOpenDNS، وHaskell، وOpenBSD هو مسرح أمني خالص. SipHash ليس آمنًا بما يكفي للأغراض الأمنية وليس سريعًا بما يكفي للاستخدام العام. يحتاج توليد القوة الغاشمة التي تبلغ حوالي 32 ألف تصادم إلى 2-4 ملايين لكل هذه التجزئات. siphash هو الأبطأ الذي يحتاج إلى 4 أمتار كحد أقصى، والبعض الآخر عادةً بحد أقصى 2 دقيقة و30 ثانية، مع أقل من 10 ثوانٍ لهجمات الاصطدام العملية التي تبلغ 16 كيلو بايت مع جميع وظائف التجزئة. عادةً ما يكون استخدام Murmur أبطأ من استخدام Mult البسيط، حتى في أسوأ الحالات. الأمان الذي يمكن إثباته هو فقط التجزئة الموحدة، أي 2-5 مستقل أو جدولة، أو استخدام مخطط تصادم لوغاريتمي مضمون (شجرة) أو مخطط تصادم خطي، مثل swisstable/folly-F14، أو Robin Hood أو Cuckoo hashing مع عد التصادمات.
ملاحظة أخرى تتعلق بالأمن: في الوقت الحاضر يمكن حل حتى SHA1 في حل، مثل Z3 (أو تلك الأسرع) لهجمات تصادم جدول التجزئة العملية (أي 14-20 بت). لا يمكن اعتبار جميع وظائف التجزئة التي تحتوي على أقل من 160 بت التي تم اختبارها هنا "آمنة" على الإطلاق.
تم اختبار هجوم الثغرة الأمنية "" باستخدام المفاتيح الثنائية في اختبار Sanity Zero الثاني.
يتم تقوية تجزئات العملات المشفرة الخاصة بنا باستخدام بذرة size_t المضافة، وخلطها في الحالة الأولية، ويتم تقوية الإصدارات التي تتطلب حشوة صفرية عن طريق إضافة len أيضًا، لمنع الاصطدامات مع AppenedZeroes للحشوة. توفر تطبيقات libtomcrypt بالفعل هذا الأمر، لكن قد لا توفره تطبيقات أخرى. بدونها، تكون وظائف تجزئة التشفير هذه غير مناسبة للمهام العادية، حيث أنه من السهل إنشاء تصادمات عن طريق الحشو أو البذور السيئة.
لا تقوم مجموعة اختبارات دالة التجزئة الرسمية الخاصة بـ NIST بإجراء مثل هذه الاختبارات الإحصائية الشاملة للبحث عن النطاقات الضعيفة في البتات. كما أن التشفير لا يغير الحالة الأولية، وهو ما نقوم به هنا لبذرة 32 بت العشوائية. يهتم التشفير في الغالب بالمفتاح الذي لا يمكن الرجوع عنه -> وظائف التجزئة دون تغيير الحالة الثابتة الأولية والتوقيتات/هجمات القناة الجانبية.
يتضمن "برنامج التحقق من صحة خوارزمية التشفير" (CAVP) التابع لـ NIST اختبار تطبيقات خوارزميات التشفير المعتمدة من FIPS والموصى بها من قبل NIST. أثناء مسابقة NIST SHA-3، تم استعارة منهجية الاختبار من "CAVP"، حيث استندت KATs وMCTs الخاصة بمجموعة اختبار المنافسة SHA-3 إلى اختبارات CAVP لـ SHA-2. بالإضافة إلى ذلك، يتطلب "اختبار الرسائل الطويلة للغاية"، غير الموجود في CAVP لـ SHA-2، من المرسلين إنشاء قيمة التجزئة المقابلة لرسالة بطول 1 جيجا بايت. "NIST - برنامج التحقق من صحة خوارزمية التشفير (CAVP)،" يونيو 2017. متاح: http://csrc.nist.gov/groups/STM/cavp (لم يتم توفير كود مصدر الاختبار، فقط أوصاف عالية المستوى)
عثر فريقان آخران من مجموعات الاختبار المستقلة التابعة لجهات خارجية على عدد كبير من الأخطاء ونقاط الضعف في مرشحات SHA3. "العثور على الأخطاء في تطبيقات دالة التجزئة المشفرة"، نيكي موها، محمد إس روناك، د. ريتشارد كون، وراغو كاكر، 2017. https://eprint.iacr.org/2017/891.pdf
ربما يجب على الباحثين المستقلين أن يجتمعوا معًا لإجراء جولة SHA-4 عامة أفضل، بناءً على طرق اختبار أفضل وأكثر، وكود مفتوح المصدر للاختبارات، واستخدام ممارسات الصناعة القياسية، مثل valgrind، و Address-sanitizer، و ubsan لاكتشاف الأخطاء الواضحة. .
بذور سيئة
عادةً ما تتم تهيئة وظائف التجزئة باستخدام بذرة عشوائية. لكن بعض القيم الأولية قد تؤدي إلى وظائف تجزئة سيئة، بغض النظر عن المفتاح. في الحالة العادية مع البذور العشوائية، يكون احتمال ظهور مثل هذه البذور السيئة منخفضًا جدًا، مثل 2^32 أو 2^64. والتطبيق العملي يحتاج إلى معرفة ما إذا كانت البذور الفاسدة موجودة واختيار بذور أخرى. راجع على سبيل المثال mirhash_seed_init()
و mirhash_bad_seeds()
في Hashes.h
. لاحظ أن البذرة السيئة لا تمثل مشكلة حقًا عند تخطي هذه البذرة أثناء التهيئة. لا يزال من الممكن أن تكون وظيفة تجزئة جيدة أو موصى بها. لكن البذرة السيئة التي تبلغ 0
والتي تؤدي إلى الاصطدامات تعتبر خطأً، وهي وظيفة تجزئة سيئة.
نقوم باختبار الأسرار الداخلية، إذا كان سيتم ضربها بـ 0. وهذا ما يسمى أيضًا "الضرب المسبب للعمى". يسرد main.cpp
بعض الأسرار لكل دالة تجزئة نختبرها. تسرد الدالة <hash>_bad_seeds()
البذور السيئة المؤكدة.
يجب توخي الحذر بشكل خاص مع CRC، ومعظم متغيرات FNV1، وFletcher، وJenkins. ومع التجزئات الجيدة لمعظم متغيرات MUM، مثل mirhash وMUM وwyhash.
وبصرف النظر عن هذا، عندما يعرف المهاجم البذرة، فسيؤدي ذلك إلى هجمات DDOS. حتى مع وجود تجزئة التشفير في جداول تجزئة power2.
مشاكل السلوك غير المحدد النموذجية ( UB ):
منحرفة
العديد من التجزئات حسب الكلمات (على عكس المعالجة الآمنة حسب البايت) لا تتحقق من مخزن الإدخال المؤقت للتأكد من محاذاة الكلمات بشكل صحيح، الأمر الذي سيفشل مع ubsan أو Sparc. الكلمة هي int32_t
أو int64_t
أو أكثر. في بعض أجهزة RISC القديمة، سيكون هذا خطأً في الناقل، ويمكنك أيضًا السماح لـ Intel HW بإنشاء مثل هذا الخطأ في الناقل عن طريق تعيين بعض علامات وحدة المعالجة المركزية. ولكن عمومًا، يعد استخدام عمليات الوصول غير المحاذاة أمرًا جيدًا.
هذه هي: mx3، Spooky، mirhash ( ولكن ليس صارمًا )، MUM، fasthash، Murmur3*، Murmur2*، Metrohash* (الكل باستثناء cmetro*)، Crap8، beamsplitter، lookup3، fletcher4، fletcher2، جميع متغيرات sanmayce FNV1a_ (FNV1a_YT، FNV1A_بيبي_يوري, FNV1A_Totenschiff، ...)، فيبوناتشي.
يتمثل التخفيف المعتاد في التحقق من محاذاة المخزن المؤقت إما في المتصل، أو توفير حلقة معالجة مسبقة للبادئة التي تمت محاذاتها بشكل غير صحيح، أو نسخ المخزن المؤقت بالكامل إلى منطقة محاذاة جديدة. ضع هذا الكود الإضافي داخل #ifdef HAVE_ALIGNED_ACCESS_REQUIRED
.
أوب - خارج الحدود
تفترض بعض وظائف التجزئة مخزنًا مؤقتًا للإدخال يمكن الوصول إليه بعد طوله حتى حجم الكلمة. يسمح هذا بمعالجة حلقة أسرع، حيث لا توجد حاجة إلى حلقة ثانية أو جدول تبديل للباقي، ولكنه يتطلب بيئة اتصال تعاونية ويعتبر على هذا النحو غشًا.
توقيع تجاوز عدد صحيح
خطأ بسيط في النوع، يحتاج هذا التجزئة إلى استخدام أنواع صحيحة غير موقعة داخليًا، لتجنب السلوك غير المحدد وغير المتسق. على سبيل المثال، SuperFastHash: تجاوز عدد صحيح موقّع: -2147483641 + -113 لا يمكن تمثيله في النوع "int"
تحول الأس الفائض
مع: FNV1A_Pippip_Yurii، FNV1A_Totenschiff، Pair_multiply_shift، sumhash32 تحول الأس 64 كبير جدًا بالنسبة لنوع 64 بت "طويل غير موقع"