Hash tercepat untuk penggunaan non-kriptografis?

154

Saya pada dasarnya menyiapkan frase untuk dimasukkan ke dalam database, mereka mungkin cacat jadi saya ingin menyimpan hash pendek dari mereka sebagai gantinya (saya akan hanya membandingkan apakah ada atau tidak, jadi hash sangat ideal).

Saya menganggap MD5 cukup lambat pada 100.000+ permintaan jadi saya ingin tahu apa yang akan menjadi metode terbaik untuk hash frase, mungkin meluncurkan fungsi hash saya sendiri atau menggunakan hash('md4', '...'akan lebih cepat pada akhirnya?

Saya tahu MySQL memiliki MD5 (), jadi itu akan melengkapi sedikit kecepatan pada akhir permintaan, tapi mungkin ada fungsi hashing lebih lanjut di MySQL Saya tidak tahu tentang itu akan bekerja dengan PHP ..

John
sumber
6
Apa yang menghentikan Anda melakukan benchmark hash?
NullUserException
3
NullUserException: Anda benar, saya akan mencobanya dengan frasa panjang acak. Hanya ingin wawasan tentang apa yang akan menjadi norma jika ada untuk menangani hal semacam ini.
John
5
MD5 tidak terlalu lambat ...
Amber
25
Anda yakin bahwa fungsi hashing adalah penghambat seluruh aplikasi? Saya ragu begitu
Akal Sehat Anda
4
Ini adalah pertanyaan yang sangat bagus untuk ditanyakan, dan komentar yang menyiratkan tidak, atau tidak penting, dan / atau harus jelas dan / atau intuitif - mengecewakan & membuat frustrasi. (Dan juga sama sekali tidak terduga.)
michael

Jawaban:

56

CRC32 cukup cepat dan ada fungsinya: http://www.php.net/manual/en/function.crc32.php

Tetapi Anda harus menyadari bahwa CRC32 akan memiliki lebih banyak tabrakan daripada hash MD5 atau bahkan SHA-1, hanya karena panjangnya yang berkurang (32 bit dibandingkan dengan 128 bit masing-masing 160 bit). Tetapi jika Anda hanya ingin memeriksa apakah string yang disimpan rusak, Anda akan baik-baik saja dengan CRC32.

Joseph
sumber
1
Wow, hanya datatype yang diperlukan adalah integer yang tidak ditandatangani, ini akan secara signifikan lebih cepat daripada hashing lainnya.
John
2
@ John: atau tidak. CRC32 ternyata lebih lambat dari MD4, dan tidak jauh lebih cepat dari MD5, pada prosesor ARM. Selain itu, CRC32 menggunakan tipe integer 32-bit yang tidak bertanda tangan, yang persis seperti yang dibutuhkan MD5 ...
Thomas Pornin
3
jika Anda memiliki manfaat / kemewahan dari cpu Intel yang lebih baru, ada perintah perakitan crc32c yang ... mungkin sangat cepat (meskipun bukan nilai crc32 tradisional). Lihat juga xxhash code.google.com/p/xxhash
rogerdpack
146
fcn     time  generated hash
crc32:  0.03163  798740135
md5:    0.0731   0dbab6d0c841278d33be207f14eeab8b
sha1:   0.07331  417a9e5c9ac7c52e32727cfd25da99eca9339a80
xor:    0.65218  119
xor2:   0.29301  134217728
add:    0.57841  1105

Dan kode yang digunakan untuk menghasilkan ini adalah:

 $loops = 100000;
 $str = "ana are mere";

 echo "<pre>";

 $tss = microtime(true);
 for($i=0; $i<$loops; $i++){
  $x = crc32($str);
 }
 $tse = microtime(true);
 echo "\ncrc32: \t" . round($tse-$tss, 5) . " \t" . $x;

 $tss = microtime(true);
 for($i=0; $i<$loops; $i++){
  $x = md5($str);
 }
 $tse = microtime(true);
 echo "\nmd5: \t".round($tse-$tss, 5) . " \t" . $x;

 $tss = microtime(true);
 for($i=0; $i<$loops; $i++){
  $x = sha1($str);
 }
 $tse = microtime(true);
 echo "\nsha1: \t".round($tse-$tss, 5) . " \t" . $x;

 $tss = microtime(true);
 for($i=0; $i<$loops; $i++){
  $l = strlen($str);
  $x = 0x77;
  for($j=0;$j<$l;$j++){
   $x = $x xor ord($str[$j]);
  }
 }
 $tse = microtime(true);
 echo "\nxor: \t".round($tse-$tss, 5) . " \t" . $x;

 $tss = microtime(true);
 for($i=0; $i<$loops; $i++){
  $l = strlen($str);
  $x = 0x08;
  for($j=0;$j<$l;$j++){
   $x = ($x<<2) xor $str[$j];
  }
 }
 $tse = microtime(true);
 echo "\nxor2: \t".round($tse-$tss, 5) . " \t" . $x;

 $tss = microtime(true);
 for($i=0; $i<$loops; $i++){
  $l = strlen($str);
  $x = 0;
  for($j=0;$j<$l;$j++){
   $x = $x + ord($str[$j]);
  }
 }
 $tse = microtime(true);
 echo "\nadd: \t".round($tse-$tss, 5) . " \t" . $x;
Quamis
sumber
3
Ah, terima kasih atas wawasan ini sebenarnya, hanya membenarkan saya menggunakan CRC32 menjadi yang tercepat.
John
@ John - Anda dapat mengambil algoritma hashing menggunakan: hash_algos(). Kode pembandingan hash berikut ada di komentar PHP ==> codepad.viper-7.com/5Wdhw6
Peter Ajtai
Terima kasih atas kodenya. Saya telah sedikit meningkatkannya. Saya tidak berpikir bahwa kita harus membandingkan fungsi seperti md5 () yang memproses seluruh string dan loop yang dilakukan byte demi byte seperti yang Anda buat dengan xor. Dalam PHP, loop ini sangat lambat dan bahkan lebih lambat dari md5 itu sendiri. Kita harus membandingkan satu hases dengan hases lainnya, semua diimplementasikan sebagai fungsi.
Maxim Masiutin
1
Hanya catatan singkat - Saya mencoba ini dengan string yang lebih panjang (~ 5000 karakter) dan CRC32 lebih lambat dari MD5 dan SHA1 pada mesin saya (i7-6650U, 16GB). CRC32 - 1.7s, MD5 - 1.4s, SHA1 - 1.5s. Selalu uji untuk diri sendiri.
Sam Tolton
4
@ Quamis tesnya bagus tetapi mungkin menyesatkan - seperti @samTolton mencatat hasilnya berbeda dan md5lebih cepat. Tes yang lebih baik adalah mengacak konten string dan panjangnya juga. dengan cara ini kita mendapatkan ide yang lebih baik tentang kinerja dunia nyata yang sebenarnya. Ini juga akan menghindari caching. Lihatlah: kinerja php hashing checksum
Shlomi Hassid
43

Daftar peringkat di mana setiap loop berbagi hal yang sama untuk crypt seperti yang lainnya.

<?php

set_time_limit(720);

$begin = startTime();
$scores = array();


foreach(hash_algos() as $algo) {
    $scores[$algo] = 0;
}

for($i=0;$i<10000;$i++) {
    $number = rand()*100000000000000;
    $string = randomString(500);

    foreach(hash_algos() as $algo) {
        $start = startTime();

        hash($algo, $number); //Number
        hash($algo, $string); //String

        $end = endTime($start);

        $scores[$algo] += $end;
    }   
}


asort($scores);

$i=1;
foreach($scores as $alg => $time) {
    print $i.' - '.$alg.' '.$time.'<br />';
    $i++;
}

echo "Entire page took ".endTime($begin).' seconds<br />';

echo "<br /><br /><h2>Hashes Compared</h2>";

foreach($scores as $alg => $time) {
    print $i.' - '.$alg.' '.hash($alg,$string).'<br />';
    $i++;
}

function startTime() {
   $mtime = microtime(); 
   $mtime = explode(" ",$mtime); 
   $mtime = $mtime[1] + $mtime[0]; 
   return $mtime;   
}

function endTime($starttime) {
   $mtime = microtime(); 
   $mtime = explode(" ",$mtime); 
   $mtime = $mtime[1] + $mtime[0]; 
   $endtime = $mtime; 
   return $totaltime = ($endtime - $starttime); 
}

function randomString($length) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyz';
    $string = '';    
    for ($p = 0; $p < $length; $p++) {
        $string .= $characters[mt_rand(0, strlen($characters) - 1)];
    }
    return $string;
}

?>

Dan hasilnya

1 - crc32b 0.111036300659
2 - crc32 0.112048864365
3 - md4 0.120795726776
4 - md5 0.138875722885
5 - sha1 0.146368741989
6 - adler32 0.15501332283
7 - tiger192,3 0.177447080612
8 - tiger160,3 0.179498195648
9 - tiger128,3 0.184012889862
10 - ripemd128 0.184052705765
11 - ripemd256 0.185411214828
12 - salsa20 0.198500156403
13 - salsa10 0.204956293106
14 - haval160,3 0.206098556519
15 - haval256,3 0.206891775131
16 - haval224,3 0.206954240799
17 - ripemd160 0.207638263702
18 - tiger192,4 0.208125829697
19 - tiger160,4 0.208438634872
20 - tiger128,4 0.209359407425
21 - haval128,3 0.210256814957
22 - sha256 0.212738037109
23 - ripemd320 0.215386390686
24 - haval192,3 0.215610980988
25 - sha224 0.218329429626
26 - haval192,4 0.256464719772
27 - haval160,4 0.256565093994
28 - haval128,4 0.257113456726
29 - haval224,4 0.258928537369
30 - haval256,4 0.259262084961
31 - haval192,5 0.288433790207
32 - haval160,5 0.290239810944
33 - haval256,5 0.291721343994
34 - haval224,5 0.294484138489
35 - haval128,5 0.300224781036
36 - sha384 0.352449893951
37 - sha512 0.354603528976
38 - gost 0.392376661301
39 - whirlpool 0.629067659378
40 - snefru256 0.829529047012
41 - snefru 0.833986997604
42 - md2 1.80192279816
Entire page took 22.755341053 seconds


Hashes Compared

1 - crc32b 761331d7
2 - crc32 7e8c6d34
3 - md4 1bc8785de173e77ef28a24bd525beb68
4 - md5 9f9cfa3b5b339773b8d6dd77bbe931dd
5 - sha1 ca2bd798e47eab85655f0ce03fa46b2e6e20a31f
6 - adler32 f5f2aefc
7 - tiger192,3 d11b7615af06779259b29446948389c31d896dee25edfc50
8 - tiger160,3 d11b7615af06779259b29446948389c31d896dee
9 - tiger128,3 d11b7615af06779259b29446948389c3
10 - ripemd128 5f221a4574a072bc71518d150ae907c8
11 - ripemd256 bc89cd79f4e70b73fbb4faaf47a3caf263baa07e72dd435a0f62afe840f5c71c
12 - salsa20 91d9b963e172988a8fc2c5ff1a8d67073b2c5a09573cb03e901615dc1ea5162640f607e0d7134c981eedb761934cd8200fe90642a4608eacb82143e6e7b822c4
13 - salsa10 320b8cb8498d590ca2ec552008f1e55486116257a1e933d10d35c85a967f4a89c52158f755f775cd0b147ec64cde8934bae1e13bea81b8a4a55ac2c08efff4ce
14 - haval160,3 27ad6dd290161b883e614015b574b109233c7c0e
15 - haval256,3 03706dd2be7b1888bf9f3b151145b009859a720e3fe921a575e11be801c54c9a
16 - haval224,3 16706dd2c77b1888c29f3b151745b009879a720e4fe921a576e11be8
17 - ripemd160 f419c7c997a10aaf2d83a5fa03c58350d9f9d2e4
18 - tiger192,4 112f486d3a9000f822c050a204d284d52473f267b1247dbd
19 - tiger160,4 112f486d3a9000f822c050a204d284d52473f267
20 - tiger128,4 112f486d3a9000f822c050a204d284d5
21 - haval128,3 9d9155d430218e4dcdde1c62962ecca3
22 - sha256 6027f87b4dd4c732758aa52049257f9e9db7244f78c132d36d47f9033b5c3b09
23 - ripemd320 9ac00db553b51662826267daced37abfccca6433844f67d8f8cfd243cf78bbbf86839daf0961b61d
24 - haval192,3 7d706dd2d37c1888eaa53b154948b009e09c720effed21a5
25 - sha224 b6395266d8c7e40edde77969359e6a5d725f322e2ea4bd73d3d25768
26 - haval192,4 d87cd76e4c8006d401d7068dce5dec3d02dfa037d196ea14
27 - haval160,4 f2ddd76e156d0cd40eec0b8d09c8f23d0f47a437
28 - haval128,4 f066e6312b91e7ef69f26b2adbeba875
29 - haval224,4 1b7cd76ea97c06d439d6068d7d56ec3d73dba0373895ea14e465bc0e
30 - haval256,4 157cd76e8b7c06d432d6068d7556ec3d66dba0371c95ea14e165bc0ec31b9d37
31 - haval192,5 05f9ea219ae1b98ba33bac6b37ccfe2f248511046c80c2f0
32 - haval160,5 e054ec218637bc8b4bf1b26b2fb40230e0161904
33 - haval256,5 48f6ea210ee1b98be835ac6b7dc4fe2f39841104a37cc2f06ceb2bf58ab4fe78
34 - haval224,5 57f6ea2111e1b98bf735ac6b92c4fe2f43841104ab7cc2f076eb2bf5
35 - haval128,5 ccb8e0ac1fd12640ecd8976ab6402aa8
36 - sha384 bcf0eeaa1479bf6bef7ece0f5d7111c3aeee177aa7990926c633891464534cd8a6c69d905c36e882b3350ef40816ed02
37 - sha512 8def9a1e6e31423ef73c94251d7553f6fe3ed262c44e852bdb43e3e2a2b76254b4da5ef25aefb32aae260bb386cd133045adfa2024b067c2990b60d6f014e039
38 - gost ef6cb990b754b1d6a428f6bb5c113ee22cc9533558d203161441933d86e3b6f8
39 - whirlpool 54eb1d0667b6fdf97c01e005ac1febfacf8704da55c70f10f812b34cd9d45528b60d20f08765ced0ab3086d2bde312259aebf15d105318ae76995c4cf9a1e981
40 - snefru256 20849cbeda5ddec5043c09d36b2de4ba0ea9296b6c9efaa7c7257f30f351aea4
41 - snefru 20849cbeda5ddec5043c09d36b2de4ba0ea9296b6c9efaa7c7257f30f351aea4
42 - md2 d4864c8c95786480d1cf821f690753dc
Pez Cuckow
sumber
4
Ada kesalahan minimal satu per satu di bagian akhir. strlen($characters)seharusnya strlen($characters) - 1:)
MM.
29

Ada perbandingan kecepatan di situs xxhash. Salin menempelkannya di sini:

 Name            Speed       Q.Score   Author
 xxHash          5.4 GB/s     10
 MumurHash 3a    2.7 GB/s     10       Austin Appleby
 SpookyHash      2.0 GB/s     10       Bob Jenkins
 SBox            1.4 GB/s      9       Bret Mulvey
 Lookup3         1.2 GB/s      9       Bob Jenkins
 CityHash64      1.05 GB/s    10       Pike & Alakuijala
 FNV             0.55 GB/s     5       Fowler, Noll, Vo
 CRC32           0.43 GB/s     9
 MD5-32          0.33 GB/s    10       Ronald L. Rivest
 SHA1-32         0.28 GB/s    10

Jadi sepertinya xxHash adalah yang paling cepat, sementara banyak lainnya mengalahkan hash yang lebih tua, seperti CRC32, MD5 dan SHA.

https://code.google.com/p/xxhash/

Perhatikan bahwa ini adalah pemesanan pada kompilasi 32-bit. Pada kompilasi 64-bit, urutan kinerja kemungkinan sangat berbeda. Beberapa hash didasarkan pada multiplikasi dan pengambilan 64-bit.

hdante
sumber
17
+-------------------+---------+------+--------------+
|       NAME        |  LOOPS  | TIME |     OP/S     |
+-------------------+---------+------+--------------+
| sha1ShortString   | 1638400 | 2.85 | 574,877.19   |
| md5ShortString    | 2777680 | 4.11 | 675,834.55   |
| crc32ShortString  | 3847980 | 3.61 | 1,065,922.44 |
| sha1MediumString  | 602620  | 4.75 | 126,867.37   |
| md5MediumString   | 884860  | 4.69 | 188,669.51   |
| crc32MediumString | 819200  | 4.85 | 168,907.22   |
| sha1LongString    | 181800  | 4.95 | 36,727.27    |
| md5LongString     | 281680  | 4.93 | 57,135.90    |
| crc32LongString   | 226220  | 4.95 | 45,701.01    |
+-------------------+---------+------+--------------+

Tampaknya crc32 lebih cepat untuk pesan kecil (dalam hal ini 26 karakter) sedangkan md5 untuk pesan yang lebih panjang (dalam hal ini> 852 karakter).

Aalex Gabi
sumber
17

Pembaruan 2019: Jawaban ini adalah yang terbaru. Perpustakaan untuk mendukung murmur sebagian besar tersedia untuk semua bahasa.

Rekomendasi saat ini adalah dengan menggunakan Murmur Hash Keluarga (lihat khususnya murmur2 atau murmur3 varian).

Hash Murmur dirancang untuk hashing cepat dengan tabrakan minimal (jauh lebih cepat dari CRC, MDx dan SHAx). Sangat sempurna untuk mencari duplikat dan sangat sesuai untuk indeks HashTable.

Bahkan itu digunakan oleh banyak database modern (Redis, ElastisSearch, Cassandra) untuk menghitung semua jenis hash untuk berbagai keperluan. Algoritma khusus ini adalah sumber utama dari banyak peningkatan kinerja dalam dekade ini.

Ini juga digunakan dalam implementasi Filter Bloom . Anda harus menyadari bahwa jika Anda mencari "hash cepat", Anda mungkin menghadapi masalah khas yang diselesaikan oleh filter Bloom. ;-)

Catatan : murmur adalah hash tujuan umum, artinya NON kriptografis. Itu tidak mencegah untuk menemukan sumber "teks" yang menghasilkan hash. Ini TIDAK sesuai dengan kata sandi hash.

Beberapa detail lainnya: MurmurHash - apa itu?

pengguna5994461
sumber
2
Ada permintaan terbuka di sini untuk menambahkan murmurhash ke php, yang dapat Anda pilih.
keune
8

Alih-alih mengasumsikan MD5 "cukup lambat", cobalah. Implementasi MD5 berbasis C sederhana pada PC sederhana (tambang, 2,4 GHz Core2, menggunakan inti tunggal) dapat memotong 6 juta pesan kecil per detik . Sebuah pesan kecil ada di sini apa saja hingga 55 byte. Untuk pesan yang lebih lama, kecepatan hashing MD5 linier dengan ukuran pesan, yaitu mengolah data sekitar 400 megabita per detik. Anda dapat mencatat bahwa ini adalah empat kali kecepatan maksimum harddisk yang baik atau kartu jaringan ethernet gigabit.

Karena PC saya memiliki empat inti, ini berarti bahwa hashing data secepat harddisk saya dapat menyediakan atau menerima penggunaan paling banyak 6% dari daya komputasi yang tersedia. Dibutuhkan situasi yang sangat istimewa untuk mempercepat hashing menjadi bottleneck atau bahkan menyebabkan biaya yang nyata pada PC.

Pada arsitektur jauh lebih kecil di mana kecepatan hashing mungkin menjadi agak relevan, Anda mungkin ingin menggunakan MD4. MD4 baik untuk tujuan non-kriptografi (dan untuk tujuan kriptografi, Anda tidak boleh menggunakan MD5). Telah dilaporkan bahwa MD4 bahkan lebih cepat daripada CRC32 pada platform berbasis ARM.

Thomas Pornin
sumber
Ada satu hal yang perlu dipertimbangkan. MD5 membutuhkan 128 bit, bukan 32. Ini berarti bahwa penyimpanan database membutuhkan ruang 4 kali lebih banyak dan karenanya 4 kali lebih lambat untuk mencari perbandingan hash (saya pikir ). Yang saya khawatirkan (untuk kegunaan saya) adalah seberapa cepat akan meminta database nanti ketika itu penuh hash.
Camilo Martin
3
Jika Anda tidak menggunakan output yang cukup luas maka Anda akan mendapatkan tabrakan acak, yang akan menjadi buruk karena tujuannya adalah untuk query database untuk mengetahui apakah "frasa" yang diberikan sudah diketahui; tabrakan di sini berubah menjadi positif palsu. Dengan 32 bit, Anda akan mulai melihat tabrakan segera setelah Anda memiliki 60000 atau lebih frase. Ini berlaku untuk semua fungsi hash, kriptografis atau tidak. Yang sedang berkata, Anda selalu dapat mengambil output dari fungsi hash dan memotongnya dengan panjang yang Anda inginkan, dalam batasan yang dijelaskan di atas.
Thomas Pornin
@ThomasPornin Jika kita pergi dengan cara memotong, bukankah itu lagi menghadapi masalah tabrakan, maksud saya satu-satunya alasan md5 seharusnya tidak mendapatkan tabrakan mudah adalah tambahan tidak ada karakter yang dimilikinya dibandingkan dengan CRC32, kan?
Mohd Abdul Mujib
4

Peringatan

Jawaban di bawah ini tidak menjawab pertanyaan sebagaimana ditanyakan, karena tidak merekomendasikan fungsi hash. Ingat, "Fungsi hash adalah fungsi apa pun yang dapat digunakan untuk memetakan data dari ukuran arbitrer ke nilai ukuran tetap." (Wikipedia) Jawaban di bawah ini merekomendasikan transformasi yang tidak menjamin hasil ukuran tetap.

Jika Anda bersedia untuk rileks persyaratan menggunakan fungsi hash , baca terus ...

Jawaban Asli

Saya sarankan urlencode () atau base64_encode () karena alasan berikut:

  • Anda tidak perlu kriptografi
  • Anda menginginkan kecepatan
  • Anda ingin cara untuk mengidentifikasi string unik saat membersihkan string 'cacat'

Mengadaptasi kode benchmark di tempat lain dalam balasan ini, saya telah menunjukkan bahwa salah satu dari ini jauh lebih cepat daripada algoritma hash apa pun. Bergantung pada aplikasi Anda, Anda mungkin dapat menggunakan urlencode () atau base64_encode () untuk membersihkan string 'salah format' yang ingin Anda simpan.

Anakronron
sumber
Re: "Anda ingin cara mengidentifikasi string unik sambil membersihkan string 'cacat': apakah Anda akan menguraikannya?
David J.
Sulit untuk mengingat apa yang saya pikirkan lebih dari enam tahun yang lalu ... Saya mungkin telah menyinggung fakta bahwa Anda tidak mendapatkan tabrakan dengan urlencode atau base64_encode, sehingga hasilnya akan seunik string asli.
Anakronron
2

Langkah Satu: Instal libsodium (atau pastikan Anda menggunakan PHP 7.2+)

Langkah Dua: Gunakan salah satu dari yang berikut:

  1. sodium_crypto_generichash(), yang merupakan BLAKE2b , fungsi hash lebih aman daripada MD5 tetapi lebih cepat dari SHA256. (Tautan memiliki tolok ukur, dll.)
  2. sodium_crypto_shorthash(), yaitu SipHash-2-4 , yang sesuai untuk tabel hash tetapi tidak harus diandalkan untuk resistensi tabrakan.

_shorthashsekitar 3x lebih cepat _generichash, tetapi Anda perlu kunci dan Anda memiliki risiko tabrakan yang kecil tapi realistis. Dengan _generichash, Anda mungkin tidak perlu khawatir tentang tabrakan, dan tidak perlu menggunakan kunci (tetapi mungkin ingin tetap melakukannya).

Scott Arciszewski
sumber
1
pertanyaannya adalah "seberapa cepat hal ini"?
My1
1
sodium_crypto_generichash(), which is BLAKE2b, a hash function more secure than MD5 but faster than SHA256. (Link has benchmarks, etc.)- blake2b tentu saja, tetapi implementasi PHP USERLAND dari blake2b akan menjadi jauh lebih lambat daripada sha256 yang diimplementasikan C untuk PHP ... saya berharap PHP dapat mengadaptasi blake2b di hash_algos () suite ..
hanshenrik
Implementasi PHP murni tidak disarankan di sini.
Scott Arciszewski
1

Jika Anda mencari yang cepat dan unik, saya sarankan xxHash atau sesuatu yang menggunakan perintah built-in cc32c cpu yang lebih baru, lihat https://stackoverflow.com/a/11422479/32453 . Juga ada tautan ke hash yang mungkin lebih cepat jika Anda tidak terlalu peduli dengan kemungkinan benturan.

rogerdpack
sumber
1

Adler32 berkinerja terbaik di mesin saya. Dan md5()ternyata lebih cepat dari crc32().

Max Tsepkov
sumber
3
Jika MD5 lebih cepat dari fungsi CRC32 generik maka ada sesuatu yang sangat salah.
nxasdf
0

Implementasi untuk md5 di dalam hash sedikit lebih cepat daripada md5 (). Jadi ini bisa menjadi pilihan atau yang lain, silakan coba:

echo '<pre>';

$run = array();

function test($algo)
{
  #static $c = 0;
  #if($c>10) return;
  #$c++;

 $tss = microtime(true);
 for($i=0; $i<100000; $i++){
  $x = hash($algo, "ana are mere");
 }
 $tse = microtime(true);

 $GLOBALS['run'][(string)round($tse-$tss, 5)] = "\nhash({$algo}): \t".round($tse-$tss, 5) . " \t" . $x;
 #echo "\n$i nhash({$algo}): \t".round($tse-$tss, 5) . " \t" . $x;
}
array_map('test', hash_algos());
ksort($run);
print_r($run);
echo '</pre>';

Anda dapat melihat di http://www.dozent.net/Tipps-Tricks/PHP/hash-performance

jujur
sumber
0

CRC32 lebih cepat, tetapi kurang aman dibandingkan MD5 dan SHA1. Tidak ada banyak perbedaan kecepatan antara MD5 dan SHA1.

Sjoerd
sumber
MD5 sekarang dianggap tidak aman. Itu jauh lebih tidak aman daripada SHA1. Baca halaman wiki MD5.
Ahmed