Fungsi hash | MiB/detik | siklus/hash | siklus/peta | ukuran | Masalah kualitas |
---|---|---|---|---|---|
tidak melakukan apa pun32 | 11149460.06 | 4.00 | - | 13 | benih buruk 0, uji NOP |
tidak melakukan apa pun64 | 11787676.42 | 4.00 | - | 13 | benih buruk 0, uji NOP |
tidak melakukan apa pun128 | 11745060.76 | 4.06 | - | 13 | benih buruk 0, uji NOP |
NOP_OAAT_baca64 | 11372846.37 | 14.00 | - | 47 | tes NOP |
Hash Buruk | 769.94 | 73,97 | - | 47 | benih buruk 0, tes GAGAL |
sumhash | 10699.57 | 29.53 | - | 363 | benih buruk 0, tes GAGAL |
sumhash32 | 42877.79 | 23.12 | - | 863 | UB, tes GAGAL |
kalikan_shift | 8026.77 | 26.05 | 226,80 (8) | 345 | benih buruk & 0xffffff0, gagal dalam sebagian besar tes |
pair_multiply_shift | 3716.95 | 40.22 | 186,34 (3) | 609 | gagal dalam sebagian besar tes |
-------------------------- | |||||
crc32 | 383.12 | 134.21 | 257,50 (11) | 422 | tidak aman, tabrakan 8590x, distribusi, 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 | Sanitas, Siklik rendah32, distribusi 36,6%. |
sha1_64 | 353.03 | 1385.80 | 1759.94 (5) | 5126 | Sanitas, Siklik rendah32, distribusi 36,6%. |
sha1-160 | 364,95 | 1470.55 | 1794.16 (13) | 5126 | Sisir/Siklik rendah32 |
sha2-224 | 147.13 | 1354.81 | 1589,92 (12) | Sisir rendah32 | |
sha2-224_64 | 147.60 | 1360.10 | 1620.93 (13) | Siklus rendah32 | |
sha2-256 | 147,80 | 1374.90 | 1606.06 (16) | ||
sha2-256_64 | 148.01 | 1376.34 | 1624.71 (16) | ||
sha1ni | 1601.21 | 174.16 | 397,28 (6) | 989 | tidak aman, kewarasan, Permutasi, Nol, khusus mesin |
sha1ni_32 | 1576.17 | 174.04 | 405,56 (6) | 989 | khusus mesin |
sha2ni-256 | 1527.38 | 184.35 | 404.40 (4) | 4241 | tidak aman, kewarasan, Permutasi, Nol, khusus mesin |
sha2ni-256_64 | 1501.85 | 186.20 | 407,96 (5) | 4241 | Nol, khusus mesin |
blake3_c | 1288.84 | 357.69 | 582,89 (6) | tidak ada portabilitas 32bit | |
rmd128 | 290,90 | 710.49 | 965,55 (6) | ||
rmd160 | 202.16 | 1045.79 | 1287.74 (16) | Siklik 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) | ||
blake2s-224 | 207.06 | 1063,86 | 1236,50 (20) | ||
blake2s-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) | ||
blake2b-224 | 356.59 | 1228.50 | 1425.87 (16) | ||
blake2b-256 | 355,97 | 1232.22 | 1443.31 (19) | ||
blake2b-256_64 | 356,97 | 1222.76 | 1435.03 (9) | ||
asconhashv12 | 144,98 | 885.02 | 1324.23 (38) | 4341 | |
asconhashv12_64 | 159.68 | 386,90 | 480,86 (4) | 6490 | |
sha3-256 | 100,58 | 3877.18 | 4159,79 (37) | PerlinNoise | |
sha3-256_64 | 100,57 | 3909.00 | 4174.63 (16) | PerlinNoise | |
hasshe2 | 2773.89 | 64.35 | 282.30 (3) | 445 | Permutasi,DuaByte,Nol,Benih |
poli_1_mersenne | 1369.21 | 61.59 | 248,86 (4) | 479 | gagal dalam sebagian besar tes |
poli_2_mersenne | 1364.03 | 70.30 | 261.00 (6) | 479 | |
poli_3_mersenne | 1342.82 | 80.22 | 268,79 (2) | 479 | |
poli_4_mersenne | 1343.19 | 89.13 | 277,52 (3) | 479 | |
tabulasi32 | 5781.16 | 40.00 | 241,79 (10) | 848 | tabrakan |
tabulasi | 7875.01 | 39,95 | 249,49 (3) | 554 | |
crc32_hw | 6244.38 | 41.23 | 226,80 (2) | 653 | tidak aman, bias 100%, tabrakan, distribusi, BIC, khusus mesin (SSE4.2/NEON) |
crc32_hw1 | 7569.29 | 49.07 | 233,75 (3) | 671 | tidak aman, bias 100%, tabrakan, distribusi, BIC, khusus mesin (x86 SSE4.2) |
crc64_hw | 6143.62 | 40.48 | 223.13 (2) | 652 | tidak aman, bias 100%, tabrakan, distribusi, BIC, khusus mesin (SSE4.2/NEON) |
crc32_pclmul | - | - | - | tidak aman, bias 100%, tabrakan, distribusi, BIC, khusus mesin (x86 SSE4.2+PCLMUL) | |
o1hash | 11629440.57 | 18.15 | 199,35 (2) | 101 | tidak aman, tidak ada benih, nol, gagal dalam semua pengujian |
fibonacci | 16878.32 | 22.94 | 803.18 (15) | 1692 | UB, nol, gagal semua tes |
FNV1a | 760.52 | 73.83 | 254,29 (5) | 204 | benih buruk, nol, gagal dalam semua tes |
FNV1A_Totenschiff | 6274.78 | 26.23 | 251.13 (2) | 270 | UB, nol, gagal semua tes |
FNV1A_Pippip_Yurii | 6172.14 | 27.55 | 244,80 (2) | 147 | UB, kewarasan, gagal semua tes |
FNV1a_YT | 13486.49 | 30.50 | 237,43 (4) | 321 | unggulan buruk, UB, gagal semua tes |
FNV2 | 6171.60 | 32.20 | 208,59 (4) | 278 | gagal dalam semua tes |
FNV64 | 774.37 | 72.43 | 201.15 (2) | 79 | gagal dalam semua tes |
FNV128 | 390.14 | 136.42 | 289.00 (3) | 171 | gagal dalam semua tes |
k-hash32 | 2230.42 | 53.05 | 264,64 (3) | 808 | tidak aman, nol, UB, benih buruk, gagal semua tes |
k-hash64 | 2451.88 | 48.66 | 249,44 (2) | 609 | tidak aman, nol, UB, benih buruk, gagal semua tes |
pembuat panah2 | 15552.61 | 20.61 | 335.31 (3) | 248 | unggulan buruk 0, UB, gagal semua tes |
pembuat panah4 | 15556.93 | 20.60 | 358,60 (3) | 371 | unggulan buruk 0, UB, gagal semua tes |
bernstein | 1045.97 | 58.31 | 225,78 (3) | 41 | seed buruk 0, gagal dalam semua tes |
sdbm | 784.83 | 68.57 | 222,68 (5) | 41 | seed buruk 0, gagal dalam semua tes |
x17 | 748.75 | 74.13 | 236.00 (10) | 79 | Bias 99,98%, gagal dalam semua pengujian |
kebebasan | 628.66 | 84,95 | 225.07 (4) | 37 | tidak aman, bias 100%, gagal dalam semua pengujian, seed buruk |
gcc | 611.69 | 86.47 | 231,51 (5) | 39 | tidak aman, bias 100%, gagal dalam semua pengujian, seed buruk |
JenkinsOOAT | 627.64 | 107.04 | 252,79 (3) | 153 | benih buruk 0, bias 53,5%, gagal dalam semua tes |
JenkinsOOAT_perl | 608.10 | 94.17 | 254.09 (4) | 65 | unggulan buruk 0, bias 1,5-11,5%, tabrakan 7,2x, BIC, LongNeighbours |
MikroOAAT | 701.35 | 76.68 | 251.01 (3) | 68 | Bias 100%, distribusikan, BIC |
pearsonhash64 | 434.17 | 124.14 | 230,79 (4) | Longsoran salju, Benih, SSSE3 saja. MSVC rusak | |
pearsonhash128 | 434.23 | 121.34 | 221.03 (7) | Longsoran salju, Benih, SSSE3 saja. MSVC rusak | |
pearsonhash256 | 444.08 | 119.11 | 229,75 (4) | Longsoran salju, Benih, SSSE3 saja. MSVC rusak | |
VHASH_32 | 13053.40 | 65.84 | 289,86 (3) | 1231 | kewarasan, Benih, MomenChi2 |
VHASH_64 | 13465.50 | 63,88 | 286,38 (5) | 1231 | kewarasan, Benih, Jarang |
farsh32 | 27038.23 | 66,88 | 278,89 (5) | 944 | tidak aman: AppendedZeroes, tabrakan+bias, MomentChi2, LongNeighbours |
farsh64 | 13829.32 | 112.46 | 332,59 (3) | 944 | tidak aman: AppendedZeroes, tabrakan+bias, MomentChi2, LongNeighbours |
farsh128 | 6878.88 | 233.35 | 384,85 (3) | 944 | tidak aman: AppendedZeroes, tabrakan+bias, permut,combin,2bytes,zeroes,PerlinNoise |
farsh256 | 3467.37 | 440.40 | 593,57 (5) | 944 | tidak aman: AppendedZeroes, tabrakan+bias, permut,combin,2bytes,zeroes,PerlinNoise |
jodyhash32 | 1794.34 | 41.12 | 235.12 (4) | 102 | bias, tabrakan, distr, BIC LongNeighbors |
jodyhash64 | 4813.10 | 40.72 | 239.22 (6) | 118 | bias, tabrakan, distr, BIC, LongNeighbors |
pencarian3 | 2475.35 | 39.65 | 240.10 (3) | 341 | UB, 28% bias, tabrakan, 30% distr, BIC |
supercepat | 2058.22 | 49.56 | 254.12 (3) | 210 | UB, unggulan buruk 0, bias 91%, tabrakan 5273.01x, distr 37%, BIC |
MurmurOAAT | 506.66 | 103.33 | 236,89 (3) | 47 | unggulan buruk 0, tabrakan, distr. 99,998%, BIC, LongNeighbours |
Sial8 | 3041.14 | 37.25 | 247,87 (4) | 342 | UB, bias 2,42%, tabrakan, distribusi 2%. |
Murmur1 | 2027.85 | 48.51 | 253,34 (3) | 358 | UB, 1 unggulan jelek, 511x tabrakan, Diff, BIC |
Murmur2 | 3089.18 | 41.22 | 238.42 (4) | 358 | UB, 1 unggulan jelek, bias 1,7%, coll 81x, distribusi 1,7%, BIC |
Murmur2A | 3087.98 | 45.90 | 238,54 (4) | 407 | UB, 1 unggulan buruk, bias 12,7%, LongNeighbors |
Murmur2B | 5919.38 | 38.18 | 215,96 (3) | 433 | UB, bias 1,8%, tabrakan, distribusi 3,4%, BIC |
Murmur2C | 3810.98 | 49.09 | 218,51 (3) | 444 | UB, 2^32 benih buruk, bias 91%, tabrakan, distr, BIC, LongNeighbours |
Murmur3A | 2982.67 | 49.08 | 245,78 (4) | 351 | UB, 1 unggulan jelek, Momen Chi2 69 |
PMurHash32 | 3005.85 | 48.88 | 242,38 (3) | 1862 | 1 benih jelek, Momen Chi2 69 |
Murmur3C | 4833.18 | 56.87 | 250,47 (6) | 859 | UB, LongNeighbours, Teks, DiffDist |
mirhash32rendah | 6145.39 | 36,95 | 235.09 (4) | 1112 | UB, 4 benih buruk, Siklik, LongNeighbors, khusus mesin (berbeda 32/64) |
PMPML_32 | 6639.68 | 45.33 | 257,45 (3) | 1084 | Longsoran >512, tidak diunggulkan: Seed, BIC, MomentChi2, PerlinNoise |
PMPML_64 | 9833.77 | 50.00 | 251,64 (6) | 1305 | tidak diunggulkan: Seed, MomentChi2, BIC |
xxHash32 | 5865.17 | 49.20 | 242,74 (3) | 738 | LongNeighbours, tabrakan dengan diff 4bit, MomentChi2 220 |
metrohash64 | 14741.56 | 39.44 | 215,76 (2) | 624 | UB, Tetangga Panjang, BIC |
metrohash64_1 | 14298.77 | 40.31 | 223,25 (4) | 624 | UB, LongNeighbours, BIC, MomentChi2 |
metrohash64crc_1 | 6929.69 | 44.65 | 223,68 (3) | 632 | UB, Cyclic 8/8 byte, DiffDist, BIC, MomentChi2, khusus mesin (SSE4.2/NEON) |
metrohash64crc_2 | 8150.65 | 43.72 | 219,45 (5) | 632 | UB, Cyclic 8/8 byte, DiffDist, BIC, khusus mesin (SSE4.2/NEON) |
cmetrohash64_1o | 14921.73 | 38.95 | 213,25 (2) | 3506 | UB, LongNeighbours, BIC, MomentChi2 |
cmetrohash64_1 | 14151.73 | 40.90 | 211,89 (2) | 652 | UB, LongNeighbours, BIC, MomentChi2 |
Kota64tidak ada Benih | 14209.19 | 31.80 | 225,90 (5) | 1038 | Longsoran, Jarang, TwoBytes, MomentChi2, Seed |
Kota64 | 13887.84 | 46.32 | 239,77 (3) | 1120 | Jarang, Dua Bytes |
t1ha1_64le | 13442.64 | 31.41 | 219,58 (3) | 517 | Salju longsor |
t1ha1_64be | 11586.02 | 32.74 | 232,55 (3) | 555 | Salju longsor |
t1ha0_32le | 7401.21 | 48.27 | 238,99 (3) | 509 | Jarang, Tetangga Panjang |
t1ha0_32menjadi | 6217.37 | 50.66 | 244,51 (3) | 533 | Jarang, Tetangga Panjang |
t1ha2_stream | 14011.63 | 80,72 | 275.17 (3) | 1665 | Jarang, Permutasi, Tetangga Panjang |
t1ha2_stream128 | 13136.06 | 97,80 | 306.11 (7) | 1665 | Jarang, Permutasi, Tetangga Panjang |
aesnihash | 5579.32 | 56.83 | 258,71 (5) | 1209 | gagal dalam banyak pengujian, khusus mesin (x64 AES-NI) |
falkhash | 50631.69 | 123.02 | 322.14 (7) | 264 | Jarang, Tetangga Panjang, khusus mesin (x64 AES-NI) |
MeongHash | 29969.40 | 64,96 | 274,29 (4) | 1764 | Jarang, dapat dibalik, khusus mesin (x64 AES-NI) |
MeowHash64rendah | 29485.59 | 65,98 | 278,05 (3) | 1764 | Jarang, dapat dibalik, khusus mesin (x64 AES-NI) |
MeowHash32rendah | 26944.58 | 65,95 | 292,79 (9) | 1764 | Jarang, dapat dibalik, khusus mesin (x64 AES-NI) |
-------------------------------------- | |||||
tifuhash_64 | 35.60 | 1679.52 | 1212,75 (15) | 276 | Siklus rendah32 |
floppsyhash.dll | 35.72 | 1868.92 | 1411.07 (7) | 623 | |
pemecah sinar | 789.22 | 682.45 | 1150.33 (26) | 4203 | Universitas Brawijaya |
diskohash1 | 4131.12 | 199.00 | 398,35 (5) | 1294 | |
diskohash1-128 | 4072.95 | 234.17 | 438.43 (5) | 1294 | |
diskohash2 | 3986.52 | 207.52 | 421,99 (2) | 1294 | |
diskohash2-128 | 4094.73 | 236.61 | 433,35 (4) | 1294 | |
diskoNONG | 3698.45 | 399.67 | 597,78 (9) | benih yang buruk | |
chakey | 1143.05 | 113,70 | 294,43 (4) | 1609 | PerlinNoise |
SipHash | 943.53 | 147.15 | 338,74 (4) | 1071 | |
SetengahSipHash | 1141.57 | 79,65 | 263,96 (3) | 700 | angka nol |
BagusOAAT | 743.81 | 85.62 | 231.22 (3) | 237 | |
pearsonbhash64 | 1794.83 | 97,80 | 268,90 (8) | 683 | |
pearsonbhash128 | 1691.62 | 104.57 | 272,38 (4) | 1134 | |
pearsonbhash256 | 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 | |
SipHash13 | 1812.75 | 106.56 | 310,76 (5) | 778 | biasnya 0,9%. |
TSip | 4233.17 | 53.31 | 249.19 (3) | 519 | !msvc |
seahash | 8261.80 | 58.94 | 256.08 (4) | 871 | PerlinNoise, !msvc |
seahash32rendah | 8266.17 | 58.90 | 290.21 (16) | 871 | PerlinNoise 32, !msvc |
bentrokan | 18703.04 | 70.19 | 282.12 (6) | 1809 | PerlinNoise, khusus mesin (x64 SSE4.2) |
Jalan RayaHash64 | 6242.58 | 99,55 | 248,41 (3) | 2546 | |
Murmur3F | 7623.44 | 52.69 | 221,87 (3) | 699 | Universitas Brawijaya |
BUNGKAM | 9563.99 | 34,99 | 228,55 (5) | 1912 | UB, terlalu banyak benih jelek, khusus mesin (berbeda 32/64) |
MUMlow | 9261.89 | 36.17 | 247,66 (4) | 1912 | UB, 5 bibit jelek |
xmsx32 | 2039.10 | 46.39 | 249.30 (7) | 192 | 2 benih buruk |
mirhash | 6139.07 | 37.02 | 209,47 (3) | 1112 | UB, 2^36 benih buruk, LongNeighbors, khusus mesin (berbeda 32/64) |
mirhashstrict | 3549.01 | 49,99 | 224,91 (2) | 1112 | |
mirhashstrict32rendah | 3441.35 | 50.60 | 247.19 (3) | 1112 | 1 benih buruk, MomentChi2 9 |
fasthash32 | 6128.28 | 40.30 | 241,64 (4) | 566 | Universitas Brawijaya |
fasthash64 | 5818.92 | 38.70 | 220,74 (2) | 509 | Universitas Brawijaya |
aesni | 31232.34 | 29.21 | 230.14 (4) | 519 | khusus mesin (x64 AES-NI) |
aesni-rendah | 31221.14 | 29.64 | 226.18 (3) | 519 | khusus mesin (x64 AES-NI) |
mx3 | 9034.90 | 48.71 | 227,89 (2) | 734 | Universitas Brawijaya |
pengyhash | 13428.80 | 74.24 | 275,42 (5) | 421 | |
Kota32 | 5551.28 | 54.40 | 261,64 (2) | 1319 | |
Kota64rendah | 13904.10 | 46.24 | 260,08 (3) | 1120 | |
Kota128 | 14031.96 | 89.09 | 290,05 (10) | 1841 | |
KotaCrc128 | 7916.44 | 55.50 | 240,79 (2) | 295 | |
PertanianHash32 | 21755.58 | 47.54 | 258,35 (3) | 11489 | khusus mesin (x64 SSE4/AVX) |
PertanianHash64 | 12845.53 | 47.11 | 251,58 (3) | 3758 | |
PertanianHash128 | 13913.65 | 70.25 | 263,06 (3) | 163 | |
farmhash32_c | 21601.86 | 47.38 | 273,00 (3) | 762 | khusus mesin (x64 SSE4/AVX) |
farmhash64_c | 12834.10 | 47.23 | 246,20 (2) | 3688 | |
farmhash128_c | 13753.24 | 68,96 | 263,76 (3) | 1890 | |
metrohash64_2 | 14316.37 | 40.23 | 218.28 (3) | 627 | UB, Tetangga Panjang |
cmetrohash64_2 | 14294.26 | 40.76 | 221.40 (4) | 655 | Tetangga Panjang |
metrohash128 | 15634.66 | 73.28 | 261.23 (4) | 773 | UB, Tetangga Panjang |
metrohash128_1 | 15806.97 | 72.30 | 260,90 (4) | 773 | UB, Tetangga Panjang |
metrohash128_2 | 15822.60 | 72.30 | 255,34 (3) | 773 | UB, Tetangga Panjang |
metrohash128crc_1 | 8009.23 | 78.72 | 281,55 (13) | 723 | UB, khusus mesin (SSE4.2/NEON) |
metrohash128crc_2 | 7878.22 | 79,90 | 275.22 (4) | 723 | UB, khusus mesin (SSE4.2/NEON) |
xxHash64 | 12108.87 | 49,78 | 228,83 (2) | 1999 | |
Seram32 | 13108.95 | 56.27 | 255,36 (3) | 2221 | Universitas Brawijaya |
Seram64 | 13529.36 | 58.76 | 236.31 (3) | 2221 | Universitas Brawijaya |
Seram128 | 11781.35 | 58.91 | 242,91 (3) | 2221 | Universitas Brawijaya |
SeramV2_32 | 13529.16 | 55.55 | 248,37 (4) | 2069 | |
SeramV2_64 | 12678.82 | 56.71 | 243.21 (4) | 2069 | |
SeramV2_128 | 13512.82 | 58.33 | 244,56 (5) | 2069 | |
ahash64 | 9862.62 | 27.32 | 181,68 (1) | 412 | karat |
xxh3 | 21033.55 | 29.48 | 226,77 (4) | 744 | DiffDist sedikit 7 w. 36 bit, BIC |
xxh3rendah | 17093.19 | 30.57 | 242.07 (7) | 756 | |
xxh128 | 18802.16 | 32.37 | 234.30 (4) | 1012 | |
xxh128rendah | 18833.05 | 32.30 | 234,68 (3) | 1012 | |
t1ha2_sekali | 13854.44 | 37.92 | 233,54 (2) | 541 | Angka nol rendah3 |
t1ha2_sekali128 | 14148.42 | 55.70 | 253,74 (6) | 613 | Tetangga Panjang |
t1ha0_aes_noavx | 27231.59 | 37.70 | 236.10 (3) | 925 | LongNeighbours, khusus mesin (x86 AES-NI) |
t1ha0_aes_avx1 | 22714.85 | 48.12 | 226,52 (16) | 843 | LongNeighbours, khusus mesin (x64 AVX.txt) |
t1ha0_aes_avx2 | 56919.46 | 36.70 | 233.14 (2) | 792 | LongNeighbors, khusus mesin (x64 AVX2) |
wyhash32 | 2532.89 | 48.40 | 484,57 (1) | 426 | 4 biji jelek dan rusak, 32-bit |
wyhash32rendah | 22393.77 | 29.04 | 243,40 (3) | 474 | 5 benih buruk |
wyhash | 22540.23 | 28.87 | 236.16 (8) | 474 | |
hash cepat | 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_hai | 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 | |
paruh waktu_hash64 | 4735.63 | 99,90 | 315,34 (3) | 2911 | |
paruh waktu_hash128 | 17534.53 | 97,97 | 311.10 (4) | 2462 | |
paruh waktu_hash256 | 18003.39 | 99,46 | 315,09 (3) | 2622 | |
paruh waktu_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 | |
k-hashv64 | 7850.92 | 46.94 | 193,94 (1) | 1279 | |
komihash | 12242.78 | 33.02 | 236.07 (2) | 1323 | |
polimur | 9676.33 | 42.70 | 246,53 (3) | 1128 |
Varian tabel yang dapat diurutkan:
Bawaan AMD Ryzen 5 3350G 3.6GHz
Intel i5-2300 2,8GHz
Intel i5-2300 2.8GHz 32bit
AMDRyzen 3 3200U 3.5GHz
Mac Air i7-4650
Korteks-A53 2GHz (Sony XPeria L4)
Saya menambahkan beberapa hash yang dibantu SSE dan varian intel/arm CRC32-C, AES dan SHA HW yang cepat. Lihat juga https://github.com/aappleby/smhasher/wiki yang lama, fork yang ditingkatkan namun tidak dirawat https://github.com/demerphq/smhasher, dan versi baru yang ditingkatkan SMHasher3 https://gitlab.com/ fwojcik/smhasher3.
Jadi fungsi hash tercepat di x86_64 tanpa masalah kualitas adalah:
rapidhash (wyhash yang ditingkatkan)
xxh3rendah
wyhash
umash (bahkan universal!)
ahash64
t1ha2_sekali
komihash
FarmHash ( tidak portabel, terlalu spesifik untuk mesin: 64 vs 32bit, gcc lama, ... )
paruh waktu_hash128
Seram32
pengyhash
nmhash32
mx3
MUM/mir ( hasil berbeda pada lengkungan 32/64-bit, banyak benih buruk yang harus disaring )
fasthash32
Fungsi hash untuk tabel simbol atau tabel hash biasanya menggunakan hash 32 bit, untuk database, sistem file, dan checksum file biasanya 64 atau 128bit, untuk kripto sekarang dimulai dengan 256 bit.
Ukuran kunci median tipikal di Perl5 adalah 20, yang paling umum adalah 4. Mirip untuk semua bahasa dinamis lainnya. Lihat github.com/rurban/perl-hash-stats
Ketika digunakan dalam tabel hash, cache instruksi biasanya akan mengalahkan CPU dan throughput diukur di sini. Dalam pengujian saya, FNV1A
terkecil mengalahkan crc32_hw1
tercepat dengan tabel hash Perl 5. Meskipun fungsi hash yang lebih buruk tersebut akan menyebabkan lebih banyak tabrakan, keunggulan kecepatan dan kemampuan inline secara keseluruhan mengalahkan kualitas yang sedikit lebih buruk. Lihat misalnya Analisis Tujuh Dimensi Metode Hashing dan Implikasinya pada Pemrosesan Kueri untuk gambaran singkat tentang strategi tabel hash terbaik, yang memastikan bahwa hashing Mult yang paling sederhana (bernstein, FNV*, x17, sdbm) selalu mengalahkan fungsi hash yang "lebih baik" (Tabulasi, Murmur, Farm, ...) saat digunakan dalam tabel hash.
Fungsi hash cepat yang diuji di sini direkomendasikan karena cepat untuk intisari file dan mungkin database yang lebih besar, tetapi tidak untuk tabel hash 32bit. "Masalah kualitas" menyebabkan distribusi yang kurang seragam, yaitu lebih banyak tabrakan dan kinerja yang lebih buruk, namun jarang terkait dengan serangan keamanan nyata, hanya uji kewarasan AppendZeroes ke-2 terhadap �
relevan dengan keamanan.
MiB/detik: Rata-rata pengujian kecepatan kunci Massal untuk penyelarasan 0-7 dengan kunci 262144 byte. Semakin tinggi semakin baik.
cycl./hash: Rata-rata pengujian kecepatan kunci Kecil untuk kunci 1-31 byte. Semakin kecil semakin baik.
cycl./map: Hasil pengujian Hashmap untuk /usr/dict/words dengan kueri get hashmap C++ yang cepat, dengan deviasi standar dalam tanda kurung. Ini menguji ketidakmampuan fungsi hash dalam praktiknya (lihat ukuran). Semakin kecil semakin baik.
size: Ukuran objek dalam byte pada AMD64. Hal ini mempengaruhi ketidaksesuaian misalnya tabel hash. Semakin kecil semakin baik.
Masalah kualitas: Lihat kegagalan di dokumen tertaut. Semakin sedikit semakin baik.
https://github.com/martinus/better-faster-stronger-mixer Mixer. Dan di blognya tolok ukur hashmap C++ terbaik.
http://nohatcoder.dk/2019-05-19-1.html memberikan klasifikasi tingkat hash baru yang berguna 1-5.
http://www.strchr.com/hash_functions mencantumkan tolok ukur lain dan kualitas fungsi hash paling sederhana dan cepat.
http://bench.cr.yp.to/primitives-hash.html mencantumkan tolok ukur dari semua hash aman yang saat ini diuji.
http://valerieaurora.org/hash.html Masa hidup fungsi hash kriptografi
Serangan tabel hash yang dijelaskan di SipHash terhadap City, Murmur atau Perl JenkinsOAAT atau di Hash Function Lounge tidak disertakan di sini. Kami mencantumkan beberapa serangan yang diketahui di GH #186.
Penghindaran serangan seperti itu tidak bisa menjadi masalah fungsi hash, tetapi hanya skema resolusi tabrakan tabel hash. Anda dapat menyerang setiap fungsi hash, bahkan yang terbaik dan teraman jika Anda mendeteksi seed, misalnya dari fitur bahasa (salah), serangan saluran samping, waktu tabrakan, dan urutan pengurutan secara independen, jadi Anda perlu melindungi tabrakan Anda skema penanganan dari kasus terburuk O(n), yaitu rangkaian terpisah dengan daftar tertaut. Rangkaian daftar tertaut memungkinkan faktor beban tinggi, namun sangat tidak ramah terhadap cache. Satu-satunya skema daftar tertaut yang direkomendasikan adalah memasukkan kunci atau hash ke dalam array. Saat ini semua orang menggunakan pengalamatan terbuka cepat, meskipun faktor beban harus ~50%, kecuali Anda menggunakan Cuckoo Hashing.
Yaitu penggunaan SipHash untuk tabel hash mereka di Python 3.4, Ruby, Rust, Systemd, OpenDNS, Haskell dan OpenBSD adalah teater keamanan murni. SipHash tidak cukup aman untuk tujuan keamanan dan tidak cukup cepat untuk penggunaan umum. Generasi brute force dari ~32k tabrakan membutuhkan 2-4m untuk semua hash ini. siphash menjadi yang paling lambat membutuhkan maksimal 4m, lainnya biasanya maksimal 2m30s, dengan <10s untuk serangan tabrakan praktis 16k dengan semua fungsi hash. Penggunaan Murmur biasanya lebih lambat dibandingkan Mult sederhana, bahkan dalam kasus terburuk. Keamanan yang dapat dibuktikan hanyalah hashing yang seragam, yaitu 2-5 Mult atau Tabulasi independen, atau menggunakan skema tumbukan logaritmik yang terjamin (pohon) atau skema tumbukan linier, seperti swisstable/folly-F14, Robin Hood atau hashing Cuckoo dengan penghitungan tumbukan.
Satu lagi catatan mengenai keamanan: Saat ini bahkan SHA1 dapat diselesaikan dalam pemecah, seperti Z3 (atau yang lebih cepat) untuk serangan tabrakan tabel hash praktis (yaitu 14-20 bit). Semua fungsi hash dengan kurang dari 160 bit yang diuji di sini tidak dapat dianggap "aman" sama sekali.
Serangan kerentanan '�' dengan kunci biner diuji pada pengujian Sanity Zero ke-2.
Hash kripto kami diperkuat dengan seed size_t tambahan, dicampur ke dalam keadaan awal, dan versi yang memerlukan zero-padding diperkuat dengan menambahkan len juga, untuk mencegah tabrakan dengan AppendedZeroes untuk padding. Implementasi libtomcrypt sudah menyediakan hal tersebut, namun implementasi lainnya mungkin tidak. Tanpanya, fungsi hash kripto seperti itu tidak cocok untuk tugas normal, karena menciptakan tabrakan dengan padding atau seed yang buruk adalah hal yang sepele.
Testsuite fungsi hash NIST resmi tidak melakukan uji statistik ekstensif, untuk mencari rentang lemah dalam bit. Crypto juga tidak mengubah keadaan awal, yang kami lakukan di sini untuk seed 32bit acak kami. Crypto sebagian besar peduli dengan fungsi hash -> kunci yang tidak dapat dibalikkan tanpa mengubah status tetap awal dan waktu/serangan saluran samping.
"Program Validasi Algoritma Kriptografi" (CAVP) NIST melibatkan pengujian implementasi algoritma kriptografi yang disetujui FIPS dan direkomendasikan NIST. Selama kompetisi NIST SHA-3, metodologi pengujian dipinjam dari "CAVP", karena KAT dan MCT dari Rangkaian Tes Kompetisi SHA-3 didasarkan pada tes CAVP untuk SHA-2. Selain itu, “Tes Pesan Sangat Panjang,” yang tidak ada dalam CAVP untuk SHA-2, mengharuskan pengirim untuk menghasilkan nilai hash yang sesuai dengan pesan dengan panjang 1 GiB. “NIST - Cryptographic Algorithm Validation Program (CAVP),” Juni 2017. Tersedia: http://csrc.nist.gov/groups/STM/cavp (Tidak ada kode sumber pengujian yang disediakan, hanya deskripsi tingkat tinggi)
Dua testsuite pihak ketiga independen lainnya menemukan sejumlah besar bug dan kelemahan pada kandidat SHA3. "Menemukan Bug dalam Implementasi Fungsi Hash Kriptografi", Nicky Mouha, Mohammad S Raunak, D. Richard Kuhn, dan Raghu Kacker, 2017. https://eprint.iacr.org/2017/891.pdf
Mungkin peneliti independen harus bersatu untuk melakukan putaran SHA-4 publik yang lebih baik, berdasarkan metode pengujian yang lebih baik dan lebih banyak, kode sumber terbuka untuk pengujian, dan menggunakan praktik industri standar, seperti valgrind, pembersih alamat, dan ubsan untuk mendeteksi bug yang jelas terlihat. .
Benih Buruk
Fungsi hash biasanya diinisialisasi dengan seed acak. Namun beberapa nilai awal dapat menyebabkan fungsi hash buruk, apa pun kuncinya. Dalam kasus biasa dengan benih acak, kemungkinan benih buruk tersebut sangat rendah, seperti 2^32 atau 2^64. Penerapan praktisnya perlu mengetahui apakah ada benih buruk dan memilih benih lain. Lihat misalnya mirhash_seed_init()
dan mirhash_bad_seeds()
di Hashes.h
. Perhatikan bahwa seed yang buruk sebenarnya tidak menjadi masalah jika Anda melewatkan seed ini selama inisialisasi. Ini masih bisa menjadi fungsi hash yang BAIK atau direkomendasikan. Tapi benih buruk 0
yang menyebabkan tabrakan dianggap sebagai bug, fungsi hash yang buruk.
Kami menguji rahasia internal, apakah rahasia tersebut akan dikalikan dengan 0. Ini juga disebut "perkalian yang membutakan". main.cpp
mencantumkan beberapa rahasia untuk setiap fungsi hash yang kami uji. Fungsi <hash>_bad_seeds()
mencantumkan benih buruk yang dikonfirmasi.
Perhatian khusus perlu diberikan untuk crc, sebagian besar varian FNV1, fletcher, Jenkins. Dan dengan hash BAIK sebagian besar varian MUM, seperti mirhash, MUM, wyhash.
Terlepas dari hal ini, ketika penyerang mengetahui seed tersebut akan menyebabkan serangan DDOS. Bahkan dengan hash kripto di tabel hash power2.
Masalah khas perilaku tidak terdefinisi ( UB ):
Tidak selaras
Banyak hash berdasarkan kata (berlawanan dengan pemrosesan berdasarkan byte yang aman) tidak memeriksa buffer input untuk penyelarasan kata yang tepat, yang akan gagal dengan ubsan atau Sparc. kata menjadi int32_t
atau int64_t
atau bahkan lebih. Pada beberapa perangkat keras RISC lama, ini akan menjadi kesalahan BUS, Anda bahkan dapat membiarkan Intel HW menghasilkan kesalahan bus seperti itu dengan menyetel beberapa tanda CPU. Namun secara umum menggunakan akses yang tidak selaras tidak masalah.
Ini adalah: mx3, Spooky, mirhash ( tetapi tidak ketat ), MUM, fasthash, Murmur3*, Murmur2*, metrohash* (semua kecuali cmetro*), Crap8, beamsplitter, lookup3, fletcher4, fletcher2, semua varian sanmayce FNV1a_ (FNV1a_YT, FNV1A_Pippip_Yurii, FNV1A_Totenschiff, ...), fibonacci.
Mitigasi yang biasa dilakukan adalah dengan memeriksa penyelarasan buffer di pemanggil, menyediakan loop pra-pemrosesan untuk awalan yang tidak selaras, atau menyalin seluruh buffer ke area baru yang disejajarkan. Masukkan kode tambahan itu ke dalam #ifdef HAVE_ALIGNED_ACCESS_REQUIRED
.
oob - Di luar batas
Beberapa fungsi hash mengasumsikan buffer masukan empuk yang dapat diakses melebihi panjangnya hingga ukuran kata. Hal ini memungkinkan pemrosesan loop lebih cepat, karena tidak diperlukan loop ke-2 atau tabel switch untuk sisanya, namun memerlukan lingkungan panggilan yang kooperatif dan karenanya dianggap curang.
Luapan bilangan bulat bertanda
Kesalahan tipe sederhana, hash ini perlu menggunakan tipe integer yang tidak ditandatangani secara internal, untuk menghindari perilaku tidak terdefinisi dan tidak konsisten. yaitu SuperFastHash: integer overflow bertanda: -2147483641 + -113 tidak dapat direpresentasikan dalam tipe 'int'
pergeseran eksponen meluap
Dengan: FNV1A_Pippip_Yurii, FNV1A_Totenschiff, pair_multiply_shift, sumhash32 shift eksponen 64 terlalu besar untuk tipe 64-bit 'long unsigned int'