php-perl哈希算法实现(times33哈希算法)_PHP
复制代码 代码如下:
APR_DECLARE_NONSTD(unsigned int) apr_hashfunc_default(const char *char_key,
apr_ssize_t *klen)
{
unsigned int hash = 0;
const unsigned char *key = (const unsigned char *)char_key;
const unsigned char *p;
apr_ssize_t i;
/*
* This is the popular `times 33' hash algorithm which is used by
* perl and also appears in Berkeley DB. This is one of the best
* known hash functions for strings because it is both computed
* very fast and distributes very well.
*
* The originator may be Dan Bernstein but the code in Berkeley DB
* cites Chris Torek as the source. The best citation I have found
* is "Chris Torek, Hash function for text in C, Usenet message
* in comp.lang.c , October, 1990." in Rich
* Salz's USENIX 1992 paper about INN which can be found at
* .
*
* The magic of number 33, i.e. why it works better than many other
* constants, prime or not, has never been adequately explained by
* anyone. So I try an explanation: if one experimentally tests all
* multipliers between 1 and 256 (as I did while writing a low-level
* data structure library some time ago) one detects that even
* numbers are not useable at all. The remaining 128 odd numbers
* (except for the number 1) work more or less all equally well.
* They all distribute in an acceptable way and this way fill a hash
* table with an average percent of approx. 86%.
*
* If one compares the chi^2 values of the variants (see
* Bob Jenkins ``Hashing Frequently Asked Questions'' at
* http://burtleburtle.net/bob/hash/hashfaq.html for a description
* of chi^2), the number 33 not even has the best value. But the
* number 33 and a few other equally good numbers like 17, 31, 63,
* 127 and 129 have nevertheless a great advantage to the remaining
* numbers in the large set of possible multipliers: their multiply
* operation can be replaced by a faster operation based on just one
* shift plus either a single addition or subtraction operation. And
* because a hash function has to both distribute good _and_ has to
* be very fast to compute, those few numbers should be preferred.
*
* -- Ralf S. Engelschall
*/
if (*klen == APR_HASH_KEY_STRING) {
for (p = key; *p; p++) {
hash = hash * 33 + *p;
}
*klen = p - key;
}
else {
for (p = key, i = *klen; i; i--, p++) {
hash = hash * 33 + *p;
}
}
return hash;
}
对函数注释部分的翻译: 这是很出名的times33哈希算法,此算法被perl语言采用并在Berkeley DB中出现.它是已知的最好的哈希算法之一,在处理以字符串为键值的哈希时,有着极快的计算效率和很好哈希分布.最早提出这个算法的是Dan Bernstein,但是源代码确实由Clris Torek在Berkeley DB出实作的.我找到的最确切的引文中这样说”Chris Torek,C语言文本哈希函数,Usenet消息 in comp.lang.c ,1990年十月.”在Rich Salz于1992年在USENIX报上发表的讨论INN的文章中提到.这篇文章可以在上找到. 33这个奇妙的数字,为什么它能够比其他数值效果更好呢?无论重要与否,却从来没有人能够充分说明其中的原因.因此在这里,我来试着解释一下.如果某人试着测试1到256之间的每个数字(就像我前段时间写的一个底层数据结构库那样),他会发现,没有哪一个数字的表现是特别突出的.其中的128个奇数(1除外)的表现都差不多,都能够达到一个能接受的哈希分布,平均分布率大概是86%. 如果比较这128个奇数中的方差值(gibbon:统计术语,表示随机变量与它的数学期望之间的平均偏离程度)的话(见Bob Jenkins的http://burtleburtle.net/bob/hash/hashfaq.html,中对平方差的描述),数字33并不是表现最好的一个.(gibbon:这里按照我的理解,照常理,应该是方差越小稳定,但是由于这里不清楚作者方差的计算公式,以及在哈希离散表,是不是离散度越大越好,所以不得而知这里的表现好是指方差值大还是指方差值小),但是数字33以及其他一些同样好的数字比如 17,31,63,127和129对于其他剩下的数字,在面对大量的哈希运算时,仍然有一个大大的优势,就是这些数字能够将乘法用位运算配合加减法来替换,这样的运算速度会提高.毕竟一个好的哈希算法要求既有好的分布,也要有高的计算速度,能同时达到这两点的数字很少.

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Golang est un nouveau langage de programmation hautes performances doté d'une riche bibliothèque standard et de fonctions intégrées. Celles-ci incluent des fonctions de hachage, qui peuvent être utilisées pour générer des valeurs de hachage de données pour la vérification des fichiers, la vérification des données, etc. Cet article présentera les méthodes de calcul et les applications des fonctions couramment utilisées hash, crc32, md5 et sha1 dans Golang. 1. Fonction de hachage La fonction de hachage de Golang comprend une variété d'algorithmes de hachage, tels que SHA-1, MD5, SHA-224, SHA-256, SH

Dans la bibliothèque de fonctions Java, la classe MessageDigest peut être utilisée pour les algorithmes de hachage et fournit des implémentations de MD5, SHA et d'autres algorithmes de hachage, notamment : 1. Algorithme MD5 : utilisez MessageDigest.getInstance("MD5") pour obtenir une instance. 2.Algorithme SHA : y compris SHA-1, SHA-256, SHA-384 et SHA-512, utilisez MessageDigest.getInstance("SHA-256") pour obtenir l'instance. 3. Autres algorithmes de hachage : vous pouvez utiliser des bibliothèques tierces, telles que la bibliothèque Algorithms.MessageDigest ou BouncyCastle.

Explication détaillée de l'algorithme de hachage en PHP Dans le développement PHP, l'algorithme de hachage est une technologie de cryptage couramment utilisée, qui peut convertir des données de n'importe quelle longueur en une valeur de hachage de longueur fixe. Les algorithmes de hachage sont largement utilisés dans la cryptographie, la vérification de l'intégrité des données et la recherche rapide de données. Dans cet article, nous présenterons en détail les algorithmes de hachage en PHP et fournirons quelques exemples de code pour référence. 1. Principes de base des algorithmes de hachage L'algorithme de hachage génère une valeur de hachage de longueur fixe en effectuant une série d'opérations mathématiques sur les données d'entrée. Avoir les bases suivantes

Comment utiliser le module hashlib pour le calcul de l'algorithme de hachage dans Python 2.x Dans la programmation Python, l'algorithme de hachage est un algorithme couramment utilisé pour générer une identification unique des données. Python fournit le module hashlib pour effectuer des calculs d'algorithme de hachage. Cet article expliquera comment utiliser le module hashlib pour effectuer des calculs d'algorithme de hachage et donnera quelques exemples de codes. Le module hashlib fait partie de la bibliothèque standard Python et fournit une variété d'algorithmes de hachage courants, tels que MD5, SH

Comment utiliser Java pour implémenter l'algorithme de hachage MD5 MD5 (MessageDigestAlgorithm5) est un algorithme de hachage couramment utilisé pour crypter et vérifier les données. En Java, nous pouvons utiliser la classe MessageDigest pour implémenter l'algorithme de hachage MD5. Ce qui suit est un exemple de code simple qui montre comment implémenter l'algorithme MD5 à l'aide de Java. importjava.security.MessageDigest;

La technologie sous-jacente de Python a révélé : Comment implémenter une table de hachage Une table de hachage est une structure de données très courante et importante dans le domaine informatique. Elle peut stocker et rechercher efficacement un grand nombre de paires clé-valeur. En Python, nous pouvons utiliser des tables de hachage à l'aide de dictionnaires, mais peu de gens comprennent en profondeur les détails de son implémentation. Cet article révélera la technologie d'implémentation sous-jacente des tables de hachage en Python et donnera des exemples de code spécifiques. L'idée principale d'une table de hachage est de mapper les clés dans un tableau de taille fixe via une fonction de hachage, plutôt que de simplement les stocker séquentiellement.

Comment implémenter l'algorithme de hachage SHA en utilisant Python ? SHA (Secure Hash Algorithm) est une fonction de hachage cryptographique couramment utilisée qui génère une valeur de hachage unique de longueur fixe pour n'importe quelle longueur de données. Le module hashlib est fourni en Python, qui contient des algorithmes de hachage couramment utilisés, notamment l'algorithme SHA. Cet article présentera en détail comment utiliser Python pour implémenter l'algorithme de hachage SHA et fournira des exemples de code pertinents. Tout d’abord, vous devez importer le module hashlib. Voici le code pour importer le module hashlib :

Le hachage est également appelé « hachage ». Il reçoit tout ensemble d'informations d'entrée de n'importe quelle longueur et le transforme en une empreinte de données de longueur fixe via l'algorithme de hachage. L'empreinte digitale est la valeur de hachage. Dans l’ensemble, un hachage peut être considéré comme un résumé de message.
