`

【转】一些常用的hash函数

    博客分类:
  • hash
阅读更多
一些常用的hash方法

unsigned int RSHash(const std::string& str)
{
    unsigned int b    = 378551;
    unsigned int a    = 63689;
    unsigned int hash = 0;

    for(std::size_t i = 0; i < str.length(); i++)
    {
        hash = hash * a + str[i];
        a    = a * b;
    }

    return hash;
}
/* End Of RS Hash Function */


unsigned int JSHash(const std::string& str)
{
    unsigned int hash = 1315423911;

    for(std::size_t i = 0; i < str.length(); i++)
    {
        hash ^= ((hash << 5) + str[i] + (hash >> 2));
    }

    return hash;
}
/* End Of JS Hash Function */


unsigned int PJWHash(const std::string& str)
{
    unsigned int BitsInUnsignedInt = (unsigned int)(sizeof(unsigned int) * 8);
    unsigned int ThreeQuarters     = (unsigned int)((BitsInUnsignedInt  * 3) / 4);
    unsigned int OneEighth         = (unsigned int)(BitsInUnsignedInt / 8);
    unsigned int HighBits          = (unsigned int)(0xFFFFFFFF) << (BitsInUnsignedInt - OneEighth);
    unsigned int hash              = 0;
    unsigned int test              = 0;

    for(std::size_t i = 0; i < str.length(); i++)
    {
        hash = (hash << OneEighth) + str[i];

        if((test = hash & HighBits)  != 0)
        {
            hash = (( hash ^ (test >> ThreeQuarters)) & (~HighBits));
        }
    }

    return hash;
}
/* End Of  P. J. Weinberger Hash Function */


unsigned int ELFHash(const std::string& str)
{
    unsigned int hash = 0;
    unsigned int x    = 0;

    for(std::size_t i = 0; i < str.length(); i++)
    {
        hash = (hash << 4) + str[i];
        if((x = hash & 0xF0000000L) != 0)
        {
            hash ^= (x >> 24);
        }
        hash &= ~x;
    }

    return hash;
}
/* End Of ELF Hash Function */


unsigned int BKDRHash(const std::string& str)
{
    unsigned int seed = 131; // 31 131 1313 13131 131313 etc..
    unsigned int hash = 0;

    for(std::size_t i = 0; i < str.length(); i++)
    {
        hash = (hash * seed) + str[i];
    }

    return hash;
}
/* End Of BKDR Hash Function */


unsigned int SDBMHash(const std::string& str)
{
    unsigned int hash = 0;

    for(std::size_t i = 0; i < str.length(); i++)
    {
        hash = str[i] + (hash << 6) + (hash << 16) - hash;
    }

    return hash;
}
/* End Of SDBM Hash Function */


unsigned int DJBHash(const std::string& str)
{
    unsigned int hash = 5381;

    for(std::size_t i = 0; i < str.length(); i++)
    {
        hash = ((hash << 5) + hash) + str[i];
    }

    return hash;
}
/* End Of DJB Hash Function */


unsigned int DEKHash(const std::string& str)
{
    unsigned int hash = static_cast<unsigned int>(str.length());

    for(std::size_t i = 0; i < str.length(); i++)
    {
        hash = ((hash << 5) ^ (hash >> 27)) ^ str[i];
    }

    return hash;
}
/* End Of DEK Hash Function */


unsigned int BPHash(const std::string& str)
{
    unsigned int hash = 0;
    for(std::size_t i = 0; i < str.length(); i++)
    {
        hash = hash << 7 ^ str[i];
    }

    return hash;
}
/* End Of BP Hash Function */


unsigned int FNVHash(const std::string& str)
{
    const unsigned int fnv_prime = 0x811C9DC5;
    unsigned int hash = 0;
    for(std::size_t i = 0; i < str.length(); i++)
    {
        hash *= fnv_prime;
        hash ^= str[i];
    }

    return hash;
}
/* End Of FNV Hash Function */


unsigned int APHash(const std::string& str)
{
    unsigned int hash = 0xAAAAAAAA;

    for(std::size_t i = 0; i < str.length(); i++)
    {
        hash ^= ((i & 1) == 0) ? (  (hash <<  7) ^ str[i] * (hash >> 3)) :
            (~((hash << 11) + (str[i] ^ (hash >> 5))));
    }

    return hash;
}
/* End Of AP Hash Function */

from:
http://www.cnblogs.com/luxiaoxun/archive/2012/08/06/2625659.html

分享到:
评论

相关推荐

    密码学hash函数关于hash函数的ppt

    - **消息认证码(MAC)**是使用带密钥的Hash函数实现的,它结合了Hash函数的安全特性和密钥的安全性,以确保只有合法接收方才能验证消息的完整性。 2. **数字签名** - 在数字签名过程中,首先使用密码学Hash函数...

    各种Hash函数(JAVA版)

    RS-Hash Function Value: " + ghl.RSHash(key)); System.out.println(" 2. JS-Hash Function Value: " + ghl.JSHash(key)); System.out.println(" 3. PJW-Hash Function Value: " + ghl.PJWHash(key)); System....

    Hash函数研究综述

    ### Hash函数研究综述 #### 引言 Hash函数作为一种重要的密码学组件,在现代信息安全领域扮演着关键角色。它可以用于数字签名方案、验证信息来源的真实性和完整性等方面,并且能够将任意长度的消息压缩到固定长度...

    信息安全原理与技术-第五章Hash函数和数字签名.ppt

    Hash函数和数字签名 Hash函数和数字签名 Hash函数和数字签名

    Hash函数与消息认证

    hash函数与消息认证讲义 包括 5.1 Hash函数概述 5.1.1 Hash函数定义 5.1.2 Hash函数的安全性 5.1.3 Hash函数的迭代构造法 5.2 Hash函数MD5 5.2.1 MD5算法 5.2.2 MD5的安全性 5.3 安全Hash算法SHA-1 5.3.1 SHA-1...

    常用的hash函数代码

    Hash函数代码,便于结合原理与实践。你可以下载后学习,更希望你能分享出更好的代码

    20多个常用的Hash算法C++ 实现

    Hash函数集合,包含主流的hash函数: nginx_hash算法,OpenSSL_hash算法,RSHash,JSHash,PJWHash,ELFHash,BKDRHash,DJBHash,DEKHash,APHash等等!

    混沌加密算法与HASH函数构造研究_12767438.zip

    例如,混沌可以用于生成动态的、不可预测的密钥,这些密钥可以作为输入到HASH函数中,生成唯一的哈希值,用于加密或认证。这种方式提高了密码的安全性,因为即使攻击者知道混沌系统的一些参数,他们仍然需要解决混沌...

    hash函数 实例

    根据给定的文件信息,我们可以总结出以下关于 Hash 函数在 C 语言中的实现与应用的知识点: ### 1. Hash 函数的概念 哈希函数(Hash Function)是一种将任意长度的消息映射到固定长度的消息摘要的一种算法。这种...

    HASH函数实验指导

    **正文** 在信息技术领域,哈希(Hash)函数与数字签名是两个至关重要的概念,它们在...在实验四的“Hash函数”文档中,会详细阐述这些理论知识,并可能包含具体的操作步骤和示例,以帮助学生加深理解并实践这些概念。

    Hash函数的设计优化

    本文对面向各种不同标本的 Hash 函数进行讨论,并对多种常用的 Hash 函数进行了分析和总结。 Hash 函数的评价标准应为随机性,即对任意一组标本,进入 Hash 表每一个单元的概率的平均程度,因为这个概率越平均,...

    hash函数的设计优化

    在李羽修的《Hash函数的设计优化》文档中,可能详细讨论了这些优化策略,并提供了实际案例和分析,帮助读者理解如何在实践中优化哈希函数,以满足特定需求和挑战。对于IT专业人士来说,理解和掌握哈希函数的设计优化...

    密码学基础课件:第四章 Hash函数3.pdf

    "Hash函数基础知识" Hash 函数是密码学中一种基本的加密技术,它可以将任意长度的输入数据转换为固定长度的输出数据。Hash 函数的输出结果通常是固定的位数,我们称之为 Hash 值。Hash 函数的应用非常广泛,例如...

    hash函数 c程序

    该函数可以在输入Hash_QueryParameters.txt文件下,每行为一个数据(可以随便写)输入哈希表中,可以查找,删除,插入等操作

    全排列的Hash函数(JAVA)

    标题中的“全排列的Hash函数(JAVA)”指的是在Java编程中使用Hash函数处理全排列问题。全排列是指从n个不同元素中取出m个元素,按照一定的顺序排列起来的所有可能的排列方式。在这个场景下,Hash函数通常用于快速查找...

    hash函数的完全解析

    Hash函数是一种将任意长度的输入通过散列算法转换成固定长度输出的函数,这种输出又被称为散列值或者哈希值。一个设计良好的Hash函数能够快速处理输入数据并尽量减少不同输入得到相同输出的情况,即碰撞。在信息存储...

    第八讲 HASH函数1

    HASH函数 HASH 函数是密码学中的一种基本概念,用于将任意长的数据变换为定长的码。HASH 函数的定义是将输入消息 M 变换为固定大小的 Hash 码 h,记为 h = H(M) 或 h = HH(M)。HASH 函数的输出 h 称为消息摘要、...

Global site tag (gtag.js) - Google Analytics