Rumah php教程 php手册 php-perl哈希算法实现(times33哈希算法)

php-perl哈希算法实现(times33哈希算法)

Jun 06, 2016 pm 08:25 PM
Algoritma hash

php-perl哈希实现算法–DJBX33A(Daniel J. Bernstein, Times 33 with Addition)APR哈希默认算法

复制代码 代码如下:


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
     * 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的,中对平方差的描述),数字33并不是表现最好的一个.(gibbon:这里按照我的理解,照常理,应该是方差越小稳定,但是由于这里不清楚作者方差的计算公式,以及在哈希离散表,是不是离散度越大越好,所以不得而知这里的表现好是指方差值大还是指方差值小),但是数字33以及其他一些同样好的数字比如 17,31,63,127和129对于其他剩下的数字,在面对大量的哈希运算时,仍然有一个大大的优势,就是这些数字能够将乘法用位运算配合加减法来替换,这样的运算速度会提高.毕竟一个好的哈希算法要求既有好的分布,也要有高的计算速度,能同时达到这两点的数字很少.

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Kaedah pengiraan hash fungsi Golang, crc32, md5 dan sha1 Kaedah pengiraan hash fungsi Golang, crc32, md5 dan sha1 May 18, 2023 am 08:12 AM

Golang ialah bahasa pengaturcaraan berprestasi tinggi baharu dengan perpustakaan standard yang kaya dan fungsi terbina dalam. Ini termasuk fungsi cincang, yang boleh digunakan untuk menjana nilai cincang data untuk pengesahan fail, pengesahan data, dsb. Artikel ini akan memperkenalkan kaedah pengiraan dan aplikasi hash fungsi yang biasa digunakan, crc32, md5 dan sha1 di Golang. 1. Fungsi cincang Fungsi cincang Golang merangkumi pelbagai algoritma cincang, seperti SHA-1, MD5, SHA-224, SHA-256, SH

Apakah alat algoritma hash yang biasa digunakan dalam perpustakaan fungsi Java? Apakah alat algoritma hash yang biasa digunakan dalam perpustakaan fungsi Java? Apr 30, 2024 pm 03:21 PM

Dalam pustaka fungsi Java, kelas MessageDigest boleh digunakan untuk algoritma cincang dan menyediakan pelaksanaan MD5, SHA dan algoritma cincang lain, termasuk: 1. Algoritma MD5: Gunakan MessageDigest.getInstance("MD5") untuk mendapatkan contoh. 2.Algoritma SHA: termasuk SHA-1, SHA-256, SHA-384 dan SHA-512, gunakan MessageDigest.getInstance("SHA-256") untuk mendapatkan tika. 3. Algoritma pencincangan lain: Anda boleh menggunakan perpustakaan pihak ketiga, seperti perpustakaan Algorithms.MessageDigest atau BouncyCastle.

Bagaimana untuk melaksanakan algoritma hash MD5 menggunakan java Bagaimana untuk melaksanakan algoritma hash MD5 menggunakan java Sep 21, 2023 am 08:31 AM

Cara menggunakan Java untuk melaksanakan algoritma cincang MD5 MD5 (MessageDigestAlgorithm5) ialah algoritma cincang yang biasa digunakan untuk menyulitkan dan mengesahkan data. Di Java, kita boleh menggunakan kelas MessageDigest untuk melaksanakan algoritma cincangan MD5. Berikut ialah kod sampel ringkas yang menunjukkan cara melaksanakan algoritma MD5 menggunakan Java. importjava.security.MessageDigest;

Laksanakan algoritma pencincangan sha-256 anda sendiri dalam PHP! Laksanakan algoritma pencincangan sha-256 anda sendiri dalam PHP! May 23, 2022 am 11:39 AM

Hash juga dipanggil "cincang". Ia menerima sebarang set maklumat input dari sebarang panjang dan mengubahnya menjadi cap jari data panjang tetap melalui algoritma cincang. Secara keseluruhannya, cincangan boleh dianggap sebagai ringkasan mesej.

Teknologi asas Python didedahkan: cara melaksanakan jadual cincang Teknologi asas Python didedahkan: cara melaksanakan jadual cincang Nov 08, 2023 am 11:53 AM

Teknologi asas Python didedahkan: Cara melaksanakan jadual cincang Jadual cincang ialah struktur data yang sangat biasa dan penting dalam medan komputer Ia boleh menyimpan dan mencari sebilangan besar pasangan nilai kunci dengan cekap. Dalam Python, kita boleh menggunakan jadual cincang menggunakan kamus, tetapi beberapa orang memahami butiran pelaksanaannya secara mendalam. Artikel ini akan mendedahkan teknologi pelaksanaan asas jadual hash dalam Python dan memberikan contoh kod khusus. Idea teras jadual cincang adalah untuk memetakan kunci ke dalam tatasusunan bersaiz tetap melalui fungsi cincang, dan bukannya menyimpannya secara berurutan.

Cara menggunakan modul hashlib untuk pengiraan algoritma hash dalam Python 2.x Cara menggunakan modul hashlib untuk pengiraan algoritma hash dalam Python 2.x Jul 29, 2023 pm 05:16 PM

Cara menggunakan modul hashlib untuk pengiraan algoritma cincang dalam Python 2.x Dalam pengaturcaraan Python, algoritma cincang ialah algoritma yang biasa digunakan untuk menjana pengenalan data yang unik. Python menyediakan modul hashlib untuk melakukan pengiraan algoritma hash. Artikel ini akan memperkenalkan cara menggunakan modul hashlib untuk melakukan pengiraan algoritma cincang dan memberikan beberapa kod sampel. Modul hashlib adalah sebahagian daripada perpustakaan standard Python dan menyediakan pelbagai algoritma hash biasa, seperti MD5, SH

Penjelasan terperinci algoritma hash dalam PHP Penjelasan terperinci algoritma hash dalam PHP Jul 07, 2023 pm 07:13 PM

Penjelasan terperinci tentang algoritma cincang dalam PHP Dalam pembangunan PHP, algoritma cincang ialah teknologi penyulitan yang biasa digunakan, yang boleh menukar data dari sebarang panjang kepada nilai cincang panjang tetap. Algoritma hash digunakan secara meluas dalam kriptografi, pengesahan integriti data dan carian data pantas. Dalam artikel ini, kami akan memperkenalkan algoritma pencincangan dalam PHP secara terperinci dan menyediakan beberapa contoh kod untuk rujukan. 1. Prinsip Asas Algoritma Hash Algoritma cincang menjana nilai cincang panjang tetap dengan melakukan satu siri operasi matematik pada data input. Mempunyai asas berikut

Bagaimana untuk melaksanakan algoritma hashing SHA menggunakan Python? Bagaimana untuk melaksanakan algoritma hashing SHA menggunakan Python? Sep 19, 2023 pm 12:42 PM

Bagaimana untuk melaksanakan algoritma hashing SHA menggunakan Python? SHA (Algoritma Hash Selamat) ialah fungsi cincang kriptografi yang biasa digunakan yang menghasilkan nilai cincang unik panjang tetap untuk sebarang panjang data. Modul hashlib disediakan dalam Python, yang mengandungi algoritma pencincangan yang biasa digunakan, termasuk algoritma SHA. Artikel ini akan memperkenalkan secara terperinci cara menggunakan Python untuk melaksanakan algoritma cincang SHA dan memberikan contoh kod yang berkaitan. Pertama, anda perlu mengimport modul hashlib. Berikut ialah kod untuk mengimport modul hashlib:

See all articles