美文网首页
Hash算法

Hash算法

作者: YBshone | 来源:发表于2018-05-10 15:42 被阅读0次

    前言

    哈希函数又称哈希算法,它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。
    Hash算法特别的地方在于它是一种单向算法,用户可以通过Hash算法对目标信息生成一段特定长度的唯一的Hash值,却不能通过这个Hash值重新获得目标信息。因此Hash算法常用在不可还原的密码存储、信息完整性校验等

    hash值的两个特性

    抗碰撞能力:对于任意两个不同的数据块,其hash值相同的可能性极小;对于一个给定的数据块,找到和它hash值相同的数据块极为困难。
    抗篡改能力:对于一个数据块,哪怕只改动其一个比特位,其hash值的改动也会非常大。

    常用的hash算法

    常见的Hash算法有MD2、MD4、MD5、SHA1、SHA256SHA512
    加密算法的效能通常可以按照算法本身的复杂程度、密钥长度(密钥越长越安全)、加解密速度等来衡量。上述的算法中,MD2速度较慢已逐渐被淘汰外,其他算法仍在目前的加密系统产品中使用。

    MD5的全称是Message-Digest Algorithm 5(信息-摘要算法)。
    MD5的结果是128bit字节,通常由32位16进制字符串表示。
    具有很高的安全性。它对应任何字符串都可以加密成一段唯一的固定长度的代码。

    SHA1的全称是Secure Hash Algorithm(安全哈希算法) 。SHA1基于MD5,加密后的数据长度更长,
    它对长度小于264的输入,产生长度为160bit的散列值,比MD5多32bit,通常由40位的16进制字符串表示。
    因此,比MD5更加安全,但SHA1的运算速度就比MD5要慢了。

    hashlib的用法

    下面以算法MD5为例,计算一个字符串的MD5值:

    import hashlib
    
    md5 = hashlib.md5()
    md5.update("how to use md5 in python hashlib?")
    print md5.hexdigest()   # digest的意思是摘要,hex是16进制的意思
    

    计算结果如下:

    d26a53750bc40b38b65a520292f69306
    

    另一种常见的摘要算法是SHA1:

    import hashlib
    
    sha1 = hashlib.sha1()
    sha1.update("how to use sha1 in python hashlib?")
    print sha1.hexdigest()
    

    hash算法的用途

    1.加密网站注册用户的密码

    在密码学中,hash算法的主要作用是用于消息摘要和签名,主要用于消息的完整性校验。
    hash算法不可逆,用于密文保存密码的签名,网站后台只保存签名值。
    在上述场景下,对于抗碰撞和抗篡改能力要求极高,对于速度要求在其次。

    2.网站用户上传图片/文件后,计算出MD5值作为文件名

    MD5可以保证唯一性。

    3.key-value数据库中使用MD5作为key

    在使用hash进行管理的数据结构中,比如hashmap,hash值(key)存在的目的是加速键值对的查找,key的作用是为了将元素适当的放在各个桶里,对抗碰撞的要求不是那么高。换句话说,hash出来的key,只要保证value大致均匀的放在不同的桶里就可以了。但整个算法的set性能,直接与hash值产生的速度有关,所以这时候的hash值的产生速度就尤为重要。

    4.比较两个文件是否相同

    大家在下载一些资源的时候,就会发现网站提供了MD5值,就是用来检测文件是否被篡改。

    相关文章

      网友评论

          本文标题:Hash算法

          本文链接:https://www.haomeiwen.com/subject/puazrftx.html