`
javahigh1
  • 浏览: 1298360 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

开源软件中 几种经典的Hash算法的实现

 
阅读更多

http://zh.wikipedia.org/wiki/%E5%93%88%E5%B8%8C%E8%A1%A8

http://en.wikipedia.org/wiki/Hash_table

哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性。

链表查找的时间效率为O(N),二分法为log2N,B+ Tree为log2N,但Hash链表查找的时间效率为O(1)。

设计高效算法往往需要使用Hash链表,常数级的查找速度是任何别的算法无法比拟的,Hash链表的构造和冲突的不同实现方法对效率当然有一定的影响,然 而Hash函数是Hash链表最核心的部分,下面是几款经典软件中使用到的字符串Hash函数实现,通过阅读这些代码,我们可以在Hash算法的执行效率、离散性、空间利用率等方面有比较深刻的了解。

下面分别介绍几个经典软件中出现的字符串Hash函数。

●PHP中出现的字符串Hash函数



<style type="text/css"> <!-- .csharpcode, .csharpcode pre {font-size:small; color:black; font-family:consolas,"Courier New",courier,monospace; background-color:#ffffff} .csharpcode pre {margin:0em} .csharpcode .rem {color:#008000} .csharpcode .kwrd {color:#0000ff} .csharpcode .str {color:#006080} .csharpcode .op {color:#0000c0} .csharpcode .preproc {color:#cc6633} .csharpcode .asp {background-color:#ffff00} .csharpcode .html {color:#800000} .csharpcode .attr {color:#ff0000} .csharpcode .alt {background-color:#f4f4f4; width:100%; margin:0em} .csharpcode .lnum {color:#606060} --> </style>

OpenSSL中出现的字符串Hash函数


/* The following hash seems to work very well on normal text strings * no collisions on /usr/dict/words and it distributes on %2^n quite * well, not as good as MD5, but still good. */

MySql中出现的字符串Hash函数



Mysql中对字符串Hash函数还区分了大小写

另一个经典字符串Hash函数




asterisk 服务器



分享到:
评论

相关推荐

    C语言实现hash算法

    在C语言中实现这些哈希算法时,通常需要关注以下几个关键点: 1. 数据类型:由于涉及到大量的位操作,需要选择合适的整型类型,如`uint32_t`和`uint64_t`来表示32位和64位的数据。 2. 内存管理:要正确处理输入数据...

    geohash算法实现Java代码

    在Java中实现GeoHash,主要包含以下几个步骤: 1. **坐标标准化**:首先,需要将输入的经纬度坐标归一化到上述的全球坐标范围内。这是因为GeoHash算法依赖于这个标准化的坐标系。 2. **经纬度分割**:对经度和纬度...

    Hash算法之SHA1实现c++

    SHA1(Secure Hash Algorithm 1)是一种广泛使用的散列函数,属于哈希算法的一种,它能够将任意长度的输入(也叫做预映射)通过一个单向函数转换为固定长度的输出,通常这个长度是160位。SHA1算法在网络安全、数据...

    实验五:安全Hash算法SHA-1的实现

    SHA-1是由美国国家安全局(NSA)设计,并由国家标准和技术研究院(NIST)发布的一种Hash算法标准。它产生的Hash值长度为160位(20字节),并且具有较高的安全性。然而,近年来的研究表明,SHA-1已经不再被视为足够...

    Hash算法实验

    Hash算法在IT行业中扮演着至关重要的角色,尤其是在信息安全和数据完整性验证方面。本实验主题为“Hash算法实验”,主要涉及的是密码学中的消息摘要技术,具体是使用MD5(Message-Digest Algorithm 5)算法对文件...

    开源项目-cznic-hash.zip

    【cznic-hash开源项目概述】 cznic-hash是一个开源项目,主要设计...总之,cznic-hash项目为处理非可比较键提供了新的可能性,无论你是想学习哈希表的实现,还是寻找一种适用于特殊场景的映射工具,它都值得深入研究。

    基于列存储的MapReduce分布式Hash连接算法.pdf

    本文是一篇关于大数据处理中的分布式哈希连接算法的研究论文,主要探讨了在大数据环境下,如何通过列存储和MapReduce框架来实现高效率的哈希连接操作,以解决传统关系型数据库在处理大数据时面临的性能和可扩展性...

    文件加密算法(aes,md5,hash,rsa)

    在标题和描述中提到了几种常见的加密算法:AES、MD5、HASH和RSA。这些算法在不同的场景下有着各自的应用和特点。 首先,MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,产生一个128位(16字节)的...

    Lucene中的FST算法描述

    在信息检索和存储系统中,Lucene是一个开源的全文搜索引擎库,广泛应用于各种需要全文搜索功能的软件项目中。为了高效地处理和检索存储的词项(term),Lucene使用了FST(有限状态转换器,Finite State Transducer)...

    C++实现对数据的SHA-256加密算法

    在C++中实现SHA-256加密算法,我们需要了解其基本原理、步骤以及如何在代码中实现。 SHA-256算法的基本流程包括以下步骤: 1. **初始化哈希值**:首先,我们需要设置一组初始的哈希值,这些是固定的常量,由SHA-...

    21种加密解密算法和54种压缩解压算法的源码

    在这个压缩包中,包含了21种不同的加密解密算法的源代码,这些算法可能包括但不限于以下几种: 1. **DES(Data Encryption Standard)**:一种古老的对称加密算法,使用56位密钥对64位数据进行加密,尽管现在被认为...

    美图基于以太坊DPoS算法技术实现.pptx

    1. 基于以太坊实现了DPoS算法并开源到Github,提供基础服务,目前支持ERC20、BTC、EOS等多种数字货币。 2. 自研公链正在落地阶段,代码地址在Github上。 3. 为美图钱包提供基础服务,包括发送交易、转账、gas管理等...

    murmurhash

    4. **无依赖性**:MurmurHash算法不依赖于特定的硬件或环境,因此可以在各种平台上实现一致的结果。这对于分布式系统尤其重要,因为它可以保证不同节点之间的一致性。 5. **源码开放**:MurmurHash的源代码是开源的...

    MD5SHA1算法C语言实现

    在C语言中实现这些哈希算法,通常涉及以下几个步骤: 1. **数据预处理**:包括填充信息,确保输入长度是某个常数的倍数,添加长度信息等。 2. **迭代过程**:对预处理后的数据进行多次循环处理,每轮可能包括位操作...

    几百种加密算法库 ( C/C++代码 )

    "几百种加密算法库 ( C/C++代码 )" 提供了一个丰富的资源集合,涵盖了多种加密算法的实现,这些实现用C语言和C++这两种高效且广泛应用的编程语言编写。下面,我们将深入探讨这些标签所涵盖的知识点,并介绍一些常见...

    java开源包10

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    c的几百种加密算法库

    "几百种加密算法库"可能包含各种开源实现,如OpenSSL提供了多种加密、哈希和签名算法,还包括了TLS/SSL协议。Botan是一个C++的安全库,也包含了丰富的加密算法。GnuPG是GNU项目的一部分,提供PGP(Pretty Good ...

    java开源包6

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    java开源包9

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    java开源包8

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

Global site tag (gtag.js) - Google Analytics