Le hachage le plus rapide pour les utilisations non cryptographiques?


154

Je prépare essentiellement des phrases à mettre dans la base de données, elles peuvent être mal formées, je veux donc en stocker un court hachage à la place (je vais simplement comparer si elles existent ou non, donc le hachage est idéal).

Je suppose que MD5 est assez lent sur plus de 100000 demandes, donc je voulais savoir quelle serait la meilleure méthode pour hacher les phrases, peut-être que déployer ma propre fonction de hachage ou utiliser hash('md4', '...'serait plus rapide à la fin?

Je sais que MySQL a MD5 (), donc cela compléterait un peu la vitesse à la fin de la requête, mais peut-être qu'il y a encore une fonction de hachage plus rapide dans MySQL que je ne sais pas qui fonctionnerait avec PHP ...


6
Qu'est-ce qui vous empêche de comparer les hachages?
NullUserException

3
NullUserException: Vous avez raison, je vais les essayer avec des phrases de longueur aléatoire. Je voulais juste avoir un aperçu de ce qui serait la norme, le cas échéant, pour gérer ce genre de choses.
John

5
MD5 n'est pas vraiment si lent ...
Ambre

25
êtes-vous sûr que la fonction de hachage est un goulot d'étranglement de l'ensemble de l'application? J'en doute
Votre bon sens

4
C'est une très bonne question à poser, et les commentaires laissant entendre que ce n'est pas, ou n'est pas important, et / ou devrait être évident et / ou intuitif - sont décevants et frustrants. (Et aussi pas du tout inattendu.)
Michael

Réponses:


56

CRC32 est assez rapide et il y a une fonction pour cela: http://www.php.net/manual/en/function.crc32.php

Mais il faut savoir que CRC32 aura plus de collisions que MD5 ou même les hachages SHA-1, simplement en raison de la longueur réduite (32 bits contre 128 bits respectivement 160 bits). Mais si vous voulez juste vérifier si une chaîne stockée est corrompue, tout ira bien avec CRC32.


1
Wow, seul le type de données requis est un entier non signé, ce sera SIGNIFICATIVEMENT plus rapide que les autres hachages.
John

2
@John: ou pas. CRC32 s'avère être plus lent que MD4, et pas beaucoup plus rapide que MD5, sur les processeurs ARM. En outre, CRC32 utilise un type entier 32 bits non signé, ce qui est exactement tout ce dont MD5 a besoin ...
Thomas Pornin

3
si vous avez l'avantage / le luxe d'un processeur Intel plus récent, il existe une commande d'assemblage crc32c qui est ... probablement très rapide (bien que ce ne soit pas la valeur crc32 traditionnelle). Voir aussi 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

Et le code utilisé pour générer ceci est:

 $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, merci pour cette perspicacité en fait, renforce mon utilisation du CRC32 étant le plus rapide.
John

@John - Vous pouvez récupérer les algorithmes de hachage en utilisant: hash_algos(). Le code d'analyse comparative de hachage suivant était dans les commentaires PHP ==> codepad.viper-7.com/5Wdhw6
Peter Ajtai

Merci pour votre code. Je l'ai un peu amélioré. Je ne pense pas que nous devrions comparer des fonctions comme md5 () qui traitent toute la chaîne et des boucles qui font octet par octet comme vous l'avez fait avec xor. En PHP, ces boucles sont très lentes et sont encore plus lentes que le md5 lui-même. Nous devrions comparer un hases avec un autre, tous implémentés comme des fonctions.
Maxim Masiutin

1
Juste une note rapide - j'ai essayé cela avec une chaîne beaucoup plus longue (~ 5000 caractères) et CRC32 était plus lent que MD5 et SHA1 sur ma machine (i7-6650U, 16 Go). CRC32 - 1.7s, MD5 - 1.4s, SHA1 - 1.5s. Testez toujours par vous-même.
Sam Tolton

4
@Quamis le test est agréable mais peut être trompeur - comme @samTolton l'a noté, les résultats sont différents et md5plus rapides. Un meilleur test sera de randomiser également le contenu et la longueur des chaînes. de cette façon, nous avons une meilleure idée de la performance réelle dans le monde réel. Cela évitera également la mise en cache. Jetez un oeil: performances de la somme de contrôle de hachage php
Shlomi Hassid

43

Liste classée où chaque boucle partage la même chose à crypter que toutes les autres.

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

?>

Et la sortie

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
Il y a une erreur minimale à la fin. strlen($characters)devrait être strlen($characters) - 1:)
MM.

29

Il y a une comparaison de vitesse sur le site xxhash. Copiez-le en le collant ici:

 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

Il semble donc que xxHash soit de loin le plus rapide, tandis que beaucoup d'autres battent les hachages plus anciens, comme CRC32, MD5 et SHA.

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

Notez qu'il s'agit de l'ordre sur une compilation 32 bits. Sur une compilation 64 bits, l'ordre des performances est probablement très différent. Certains des hachages sont fortement basés sur des multiplications et des récupérations 64 bits.


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

Il semble que crc32 soit plus rapide pour les petits messages (dans ce cas 26 caractères) tandis que md5 pour les messages plus longs (dans ce cas> 852 caractères).


17

Mise à jour 2019: cette réponse est la plus à jour. Les bibliothèques prenant en charge le murmure sont largement disponibles pour toutes les langues.

La recommandation actuelle est d'utiliser la famille Murmur Hash (voir spécifiquement le murmur2 ou murmur3 variantes ).

Les hachages Murmur ont été conçus pour un hachage rapide avec des collisions minimales (beaucoup plus rapides que CRC, MDx et SHAx). C'est parfait pour rechercher des doublons et très approprié pour les index HashTable.

En fait, il est utilisé par de nombreuses bases de données modernes (Redis, ElastisSearch, Cassandra) pour calculer toutes sortes de hachages à des fins diverses. Cet algorithme spécifique a été à l'origine de nombreuses améliorations de performances au cours de la décennie actuelle.

Il est également utilisé dans les implémentations de filtres Bloom . Vous devez savoir que si vous recherchez des "hachages rapides", vous êtes probablement confronté à un problème typique qui est résolu par les filtres Bloom. ;-)

Remarque : le murmure est un hachage à usage général, ce qui signifie NON cryptographique. Cela n'empêche pas de trouver le "texte" source qui a généré un hachage. Il n'est PAS approprié de hacher les mots de passe.

Quelques détails supplémentaires: MurmurHash - qu'est-ce que c'est?


2
Il y a une demande ouverte ici pour ajouter murmurhash à php, sur laquelle vous pouvez voter.
keune le

8

Au lieu de supposer que MD5 est "assez lent", essayez-le. Une implémentation simple de MD5 basée sur C sur un simple PC (le mien, un Core2 2,4 GHz, utilisant un seul cœur) peut hacher 6 millions de petits messages par seconde . Un petit message est ici n'importe quoi jusqu'à 55 octets. Pour les messages plus longs, la vitesse de hachage MD5 est linéaire avec la taille du message, c'est-à-dire qu'elle transforme les données à environ 400 mégaoctets par seconde. Vous pouvez noter que c'est quatre fois la vitesse maximale d'un bon disque dur ou d'une carte réseau Gigabit Ethernet.

Étant donné que mon PC a quatre cœurs, cela signifie que le hachage des données aussi vite que mon disque dur peut fournir ou recevoir utilise au maximum 6% de la puissance de calcul disponible. Il faut une situation très particulière pour que la vitesse de hachage devienne un goulot d'étranglement ou même induise un coût notable sur un PC.

Sur des architectures beaucoup plus petites où la vitesse de hachage peut devenir quelque peu pertinente, vous pouvez utiliser MD4. MD4 convient à des fins non cryptographiques (et à des fins cryptographiques, vous ne devez de toute façon pas utiliser MD5). Il a été rapporté que MD4 est encore plus rapide que CRC32 sur les plates-formes ARM.


Il y a un point à considérer. MD5 prend 128 bits au lieu de 32. Cela signifie que le stockage de la base de données prend 4 fois plus d'espace et donc 4 fois plus lent à rechercher pour comparer les hachages (je pense ). Ce qui m'inquiète (pour mes utilisations), c'est la vitesse à laquelle il sera nécessaire d'interroger la base de données plus tard lorsqu'elle sera pleine de hachages.
Camilo Martin

3
Si vous n'utilisez pas une sortie suffisamment large, vous obtiendrez des collisions aléatoires, ce qui sera mauvais puisque le but est d'interroger une base de données pour savoir si une "phrase" donnée est déjà connue; les collisions se transforment ici en faux positifs. Avec 32 bits, vous commencerez à voir des collisions dès que vous aurez environ 60000 phrases. Ceci est vrai pour toutes les fonctions de hachage, cryptographiques ou non. Cela étant dit, vous pouvez toujours prendre la sortie d'une fonction de hachage et la tronquer à n'importe quelle longueur que vous jugez appropriée, dans les limites expliquées ci-dessus.
Thomas Pornin

@ThomasPornin Si nous suivons la voie de la troncature, ne serait-il pas à nouveau confronté au problème de collision, je veux dire que la seule raison pour laquelle le md5 est censé ne pas avoir de collision facile est le nombre supplémentaire de caractères qu'il a par rapport à CRC32, non?
Mohd Abdul Mujib

4

Caveat

La réponse ci-dessous ne répond pas à la question posée, car elle ne recommande pas les fonctions de hachage. Rappelez-vous, "Une fonction de hachage est toute fonction qui peut être utilisée pour mapper des données de taille arbitraire à des valeurs de taille fixe." (Wikipedia) La réponse ci-dessous recommande des transformations qui ne garantissent pas des résultats de taille fixe.

Si vous êtes prêt à assouplir la nécessité d'utiliser une fonction de hachage , lisez la suite ...

Réponse originale

Je suggère urlencode () ou base64_encode () pour ces raisons:

  • Vous n'avez pas besoin de cryptographie
  • Vous voulez de la vitesse
  • Vous voulez un moyen d'identifier les chaînes uniques tout en nettoyant les chaînes «mal formées»

En adaptant le code de référence ailleurs dans ces réponses, j'ai démontré que l'un ou l'autre est bien plus rapide que n'importe quel algorithme de hachage. Selon votre application, vous pourrez peut-être utiliser urlencode () ou base64_encode () pour nettoyer les chaînes «mal formées» que vous souhaitez stocker.


Re: "Vous voulez un moyen d'identifier les chaînes uniques tout en nettoyant les chaînes" mal formées "": pourriez-vous élaborer s'il vous plaît?
David J.

Il est difficile de se souvenir de ce à quoi je pensais il y a plus de six ans ... J'ai peut-être fait allusion au fait que vous n'obtenez pas de collisions avec urlencode ou base64_encode, donc les résultats seraient aussi uniques que les chaînes d'origine.
Anachronist

2

Première étape: installez libsodium (ou assurez-vous que vous utilisez PHP 7.2+)

Deuxième étape: utilisez l'une des méthodes suivantes:

  1. sodium_crypto_generichash(), qui est BLAKE2b , une fonction de hachage plus sécurisée que MD5 mais plus rapide que SHA256. (Le lien a des repères, etc.)
  2. sodium_crypto_shorthash(), qui est SipHash-2-4 , qui est approprié pour les tables de hachage mais ne doit pas être utilisé pour la résistance aux collisions.

_shorthashest environ 3 fois plus rapide que _generichash, mais vous avez besoin d'une clé et vous avez un risque de collision faible mais réaliste. Avec _generichash, vous n'avez probablement pas besoin de vous soucier des collisions, et vous n'avez pas besoin d'utiliser une clé (mais vous voudrez peut-être quand même).


1
la question est "à quelle vitesse cette chose est-elle rapide"?
My1

1
sodium_crypto_generichash(), which is BLAKE2b, a hash function more secure than MD5 but faster than SHA256. (Link has benchmarks, etc.)- blake2b bien sûr, mais une implémentation PHP USERLAND de blake2b sera beaucoup plus lente que le sha256 implémenté en C pour PHP ... j'aimerais que PHP puisse utiliser blake2b dans la suite hash_algos () ..
hanshenrik

L'implémentation PHP pure n'a pas été suggérée ici.
Scott Arciszewski

1

Si vous recherchez une solution rapide et unique, je recommande xxHash ou quelque chose qui utilise la commande intégrée crc32c du processeur plus récent, voir https://stackoverflow.com/a/11422479/32453 . Il y est également lié à des hachages éventuellement encore plus rapides si vous ne vous souciez pas autant de la possibilité de collision.


1

Adler32 fonctionne mieux sur ma machine. Et md5()s'est avéré plus rapide que crc32().


3
Si MD5 est plus rapide qu'une fonction CRC32 générique, alors quelque chose ne va pas.
nxasdf

0

L'implémentation de md5 à l'intérieur du hachage est un peu plus rapide que md5 (). Donc, cela peut être une option ou une autre, veuillez essayer:

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

Vous pouvez voir sur http://www.dozent.net/Tipps-Tricks/PHP/hash-performance


0

CRC32 est plus rapide, mais moins sécurisé que MD5 et SHA1. Il n'y a pas beaucoup de différence de vitesse entre MD5 et SHA1.


MD5 est désormais considéré comme non sécurisé. C'est beaucoup plus dangereux que SHA1. Lisez la page wiki MD5.
Ahmed
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.