Kriptografik olmayan kullanımlar için en hızlı karma?


154

Temelde veritabanına koymak için ifadeler hazırlıyorum, bu yüzden kısa bir hash yerine saklamak istiyorum bu yüzden onlar yanlış biçimlendirilmiş olabilir (Ben sadece var olup olmadığını karşılaştırmak olacak, böylece karma idealdir).

Ben MD5 100.000 + istekleri üzerinde oldukça yavaş olduğunu varsayalım öyleyse, cümleleri hash için en iyi yöntem ne olacağını bilmek istedim, belki kendi hash fonksiyonumu yaymak veya hash('md4', '...'sonunda daha hızlı olurdu?

Ben MySQL MD5 () vardır, bu yüzden sorgu sonunda biraz tamamlayıcı olacağını biliyorum, ama belki de MySQL daha hızlı bir karma işlevi var PHP ile çalışacağını bilmiyorum ..


6
Sizi karmaları karşılaştırmaktan alıkoyan nedir?
NullUserException

3
NullUserException: Haklısın, rastgele uzunluk ifadeleriyle deneyeceğim. Sadece bu tür bir şeyle başa çıkmak için varsa normun ne olduğu hakkında fikir edinmek istedim.
John

5
MD5 gerçekten o kadar yavaş değil ...
Amber

25
karma işlevinin tüm uygulamanın bir darboğaz olduğundan emin misiniz? Şüpheliyim
Common Sense

4
Bu, sormak için çok iyi bir soru ve bunu ima eden veya önemsiz olan ve / veya açık ve / veya sezgisel olması gereken yorumlar hayal kırıklığı yaratıyor. (Ve ayrıca hiç beklenmedik değil.)
michael

Yanıtlar:


56

CRC32 oldukça hızlı ve bir işlevi var: http://www.php.net/manual/en/function.crc32.php

Ancak, CRC32'nin MD5 ve hatta SHA-1 karmalarından daha fazla çarpışmaya sahip olacağını bilmelisiniz, çünkü bu sadece azaltılmış uzunluk (sırasıyla 160 bit 128 bit ile karşılaştırıldığında 32 bit). Ancak, saklanan bir dizenin bozuk olup olmadığını kontrol etmek istiyorsanız, CRC32 ile iyi olacaksınız.


1
Vay be, sadece gerekli veri tipi imzasız bir tamsayıdır, bu diğer karma işlemlerden ÖNEMLİ olarak daha hızlı olacaktır.
John

2
@John: ya da değil. CRC32 , ARM işlemcilerinde MD4'ten daha yavaş ve MD5'ten çok daha hızlı değil. Ayrıca, CRC32, MD5'in ihtiyacı olan tek şey işaretsiz bir 32 bit tamsayı türü kullanıyor ...
Thomas Pornin

3
daha yeni bir Intel cpu'nun avantajı / lüksü varsa, muhtemelen çok hızlı olan bir crc32c montaj komutu var (geleneksel crc32 değeri olmasa da). Ayrıca bkz. 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

Ve bunu oluşturmak için kullanılan kod:

 $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;

3
Ah, bu anlayış için teşekkürler, sadece CRC32 kullanımımın en hızlı olmasını sağlamıştım.
John

@John - Sen kullanarak karma algoritmalar alabilirsiniz: hash_algos(). Aşağıdaki karma karşılaştırma kodu PHP yorumlar ==> codepad.viper-7.com/5Wdhw6
Peter Ajtai

Kodun için teşekkürler. Biraz geliştirdim. Ben tüm dize ve bayt bayt xor ile yapılan gibi bayt yapmak döngüler işlemek md5 () gibi işlevleri karşılaştırmak gerektiğini sanmıyorum. PHP'de bu döngüler çok yavaştır ve md5'in kendisinden bile daha yavaştır. Biri diğerini işlev olarak uygulanan bir diğeriyle karşılaştırmalıyız.
Maxim Masiutin

1
Sadece hızlı bir not - Bunu çok daha uzun bir dize (~ 5000 karakter) ile denedim ve CRC32 makinemde MD5 ve SHA1'den daha yavaştı (i7-6650U, 16GB). CRC32 - 1.7s, MD5 - 1.4s, SHA1 - 1.5s. Her zaman kendiniz test edin.
Sam Tolton

4
@Quamis test güzel ama yanıltıcı olabilir - @samTolton'un sonuçların farklı olduğunu ve md5daha hızlı olduğunu belirtti. Daha iyi bir test, dizelerin içeriğini ve uzunluğunu da rastgele seçmek olacaktır. bu şekilde gerçek gerçek dünya performansı hakkında daha iyi bir fikir ediniriz. Bu ayrıca önbelleğe almayı da önleyecektir. Bir göz atın: php hashing checksum performans
Shlomi Hassid

43

Her döngünün diğerleriyle aynı şifreyi paylaştığı sıralama listesi.

<?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;
}

?>

Ve çıktı

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

4
Sonunda minimum birer birer hata var. strlen($characters)olmalı strlen($characters) - 1:)
MM.

29

Xxhash sitesinde bir hız karşılaştırması var. Buraya yapıştırarak kopyalayın:

 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

Görünüşe göre xxHash açık ara en hızlı olanı, diğerleri ise CRC32, MD5 ve SHA gibi daha eski karmaları dövüyor.

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

Bunun 32 bit derlemedeki sıralama olduğunu unutmayın. 64 bit derlemede performans sırası muhtemelen çok farklıdır. Bazı karma değerler 64-bit çarpma ve getirme işlemlerine dayanmaktadır.


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    |
+-------------------+---------+------+--------------+

Görünüşe göre crc32 küçük mesajlar için daha hızlı (bu durumda 26 karakter), daha uzun mesajlar için md5 (bu durumda> 852 karakter).


17

2019 güncellemesi: Bu cevap en güncel. Üfürümü destekleyecek kütüphaneler tüm diller için mevcuttur.

Mevcut öneri Murmur Hash Ailesi'ni kullanmaktır (özellikle murmur2 veya murmur3 varyantlarına bakınız).

Üfürüm karmaları asgari çarpışmalarla (CRC, MDx ve SHAx'tan çok daha hızlı) hızlı hash için tasarlanmıştır. Yinelenenleri aramak mükemmeldir ve HashTable dizinleri için çok uygundur.

Aslında, birçok modern veri tabanı (Redis, ElastisSearch, Cassandra) tarafından çeşitli amaçlarla her türlü karmayı hesaplamak için kullanılır. Bu özel algoritma, mevcut on yıldaki birçok performans iyileştirmesinin temel kaynağıydı.

Ayrıca Bloom Filtrelerinin uygulamalarında da kullanılır . "Hızlı karmaları" arıyorsanız, muhtemelen Bloom filtreleri tarafından çözülen tipik bir sorunla karşılaştığınızın farkında olmalısınız. ;-)

Not : üfürüm genel amaçlı bir karmadır, yani Kriptografik OLMAYAN anlamına gelir. Bir karma oluşturan kaynak "metni" bulmayı engellemez. Parolaları karma yapmak uygun değildir.

Bazı ayrıntılar: MurmurHash - nedir bu?


2
Burada oylayabileceğiniz php'ye murmurhash eklemek için açık bir istek var .
keune

8

MD5'in "oldukça yavaş" olduğunu varsaymak yerine deneyin. Basit bir PC'de MD5'in basit bir C tabanlı uygulaması (benimki, 2.4 GHz Core2, tek bir çekirdek kullanarak) saniyede 6 milyon küçük mesajı karıştırabilir . Küçük bir mesaj burada 55 bayta kadar bir şey. Daha uzun mesajlar için, MD5 karma hızı mesaj boyutuyla doğrusaldır, yani saniyede yaklaşık 400 megabayt veri toplar. Bunun, iyi bir sabit diskin veya gigabit ethernet ağ kartının maksimum hızının dört katı olduğunu unutmayın.

Bilgisayarım dört çekirdeğe sahip olduğu için, sabit diskimin olabildiğince hızlı veri aktarması, mevcut bilgi işlem gücünün en fazla% 6'sını kullanması veya alması anlamına gelir. Karma hızın bir darboğaz haline gelmesi ve hatta bir PC'de fark edilir bir maliyet yaratması çok özel bir durum gerektirir.

Karma hızının biraz alakalı olabileceği daha küçük mimarilerde MD4 kullanmak isteyebilirsiniz. MD4 kriptografik olmayan amaçlar için iyidir (ve kriptografik amaçlar için yine de MD5 kullanmamalısınız). ARM tabanlı platformlarda MD4'ün CRC32'den bile daha hızlı olduğu bildirildi.


Dikkate alınması gereken bir nokta var. MD5 32 yerine 128 bit alır. Bu, veritabanı depolamasının karmaları karşılaştırmak için 4 kat daha fazla alan ve dolayısıyla 4 kat daha yavaş sürdüğü anlamına gelir ( sanırım ). Ne ile (benim kullanımları için) endişe ne kadar hızlı karma dolu olduğunda daha sonra veritabanını sorgulamak olacaktır.
Camilo Martin

3
Yeterince geniş bir çıktı kullanmazsanız, belirli bir "ifade" nin zaten bilinip bilinmediğini bilmek için bir veritabanını sorgulamak olduğu için kötü olacak rastgele çarpışmalar alacaksınız; Buradaki çarpışmalar yanlış pozitiflere dönüşüyor. 32 bit ile 60000 kadar kelime öbeğiniz olduğunda çarpışmaları görmeye başlayacaksınız. Bu, tüm karma işlevler için geçerlidir, kriptografik olsun veya olmasın. Bununla birlikte, her zaman bir karma işlevinin çıktısını alabilir ve yukarıda açıklanan sınırlamalar dahilinde, uygun gördüğünüz herhangi bir uzunluğa kısaltabilirsiniz.
Thomas Pornin

@ThomasPornin Kırpma yoluna gidersek, yine çarpışma problemiyle yüzleşmez mi, md5'in kolay çarpışma yapmaması gereken tek neden, CRC32'ye kıyasla sahip olduğu ekstra karakter sayısı değil mi?
Mohd Abdul Mujib

4

Uyarı

Cevap aşağıdakilerden yok değil sordu gibi hash fonksiyonları önermez çünkü soruya cevap. Unutmayın, "Karma işlevi, rastgele boyuttaki verileri sabit boyutlu değerlerle eşlemek için kullanılabilen herhangi bir işlevdir." (Wikipedia) Aşağıdaki cevap, sabit boyutlu sonuçları garanti etmeyen dönüşümleri önermektedir.

Bir karma işlevi kullanma gereksinimini gevşetmek istiyorsanız , okumaya devam edin ...

Orijinal Yanıt

Bu nedenlerle urlencode () veya base64_encode () öneririm:

  • Kriptografiye ihtiyacınız yok
  • Hız istiyorsun
  • 'Bozuk biçimlendirilmiş' dizeleri temizlerken benzersiz dizeleri tanımlamanın bir yolunu istiyorsunuz

Karşılaştırma kodunu bu yanıtların başka bir yerine uyarlayarak, bunlardan herhangi birinin herhangi bir karma algoritmadan çok daha hızlı olduğunu gösterdim. Uygulamanıza bağlı olarak, depolamak istediğiniz 'hatalı biçimlendirilmiş' dizeleri temizlemek için urlencode () veya base64_encode () kullanabilirsiniz.


Re: "'Bozuk biçimlendirilmiş' dizeleri temizlerken benzersiz dizeleri tanımlamak için bir yol ister misiniz: lütfen biraz ayrıntı verir misiniz?
David J.

Altı yıl önce ne düşündüğümü hatırlamak zor ... Ben urlencode veya base64_encode ile çarpışma olmadığını gerçeğe bağlı olabilir, bu yüzden sonuçlar orijinal dizeleri kadar benzersiz olurdu.
Anachronist

2

Birinci Adım: Libsodium yükleyin (veya PHP 7.2+ kullandığınızdan emin olun)

İkinci Adım: Aşağıdakilerden birini kullanın:

  1. sodium_crypto_generichash()BLAKE2b olan, MD5'ten daha güvenli ancak SHA256'dan daha hızlı bir karma işlevi. (Bağlantının karşılaştırmalı değerlendirmeleri vb. Vardır)
  2. sodium_crypto_shorthash()Bu, karma tablolar için uygun olan ancak çarpışma direnci için güvenilmemesi gereken SipHash-2-4'tür .

_shorthashyaklaşık 3 kat daha hızlıdır _generichash, ancak bir anahtara ihtiyacınız vardır ve küçük ama gerçekçi bir çarpışma riski vardır. İle _generichash, muhtemelen çarpışmalar için endişelenmenize gerek yoktur ve bir anahtar kullanmanız gerekmez (ancak yine de isteyebilirsiniz).


1
soru "bu şey ne kadar hızlı"?
MY1

1
sodium_crypto_generichash(), which is BLAKE2b, a hash function more secure than MD5 but faster than SHA256. (Link has benchmarks, etc.)- blake2b emin, ama blake2b bir USERLAND PHP uygulaması PHP için C-uygulanmış sha256 çok daha yavaş olacak ... PHP hash_algos () takımında
blake2b süsleyebilseydim

Saf PHP uygulaması burada önerilmedi.
Scott Arciszewski

1

Hızlı ve benzersiz arıyorsanız, xxHash veya daha yeni cpu'nun crc32c yerleşik komutunu kullanan bir şey öneriyorum, bkz. Https://stackoverflow.com/a/11422479/32453 . Ayrıca, çarpışma olasılığını umursamıyorsanız, muhtemelen daha hızlı karmalara da bağlanır.


1

Adler32 makinemde en iyi performansı verir. Ve md5()daha hızlı çıktı crc32().


3
MD5 genel bir CRC32 fonksiyonundan daha hızlıysa, bir şeyler çok yanlıştır.
nxasdf

0

Hash5 içindeki md5 uygulaması, md5 () 'den biraz daha hızlıdır. Bu bir seçenek veya başka bir seçenek olabilir, lütfen deneyin:

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>';

Http://www.dozent.net/Tipps-Tricks/PHP/hash-performance adresinde görebilirsiniz.


0

CRC32 daha hızlıdır, ancak MD5 ve SHA1'den daha az güvenlidir. MD5 ve SHA1 arasında çok fazla hız farkı yoktur.


MD5 artık güvensiz olarak kabul edilmektedir. SHA1'den çok daha güvensiz. MD5 wiki sayfasını okuyun.
Ahmed
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.