Python中hashlib模块

Table of Contents

1. 介绍hashlib

hashlib 是一个提供了一些流行的hash算法的 Python 标准库.其中所包括的算法有 md5, sha1, sha224, sha256, sha384, sha512. 另外,模块中所定义的 new(name, string=”) 方法可通过指定系统所支持的hash算法来构造相应的hash对象.

2. hashlib的使用

  • a. 各hash算法的使用示例

    from hashlib import md5, sha1, sha224, sha256, sha384, sha512 from pprint import pprint

    hash_funcs = [md5, sha1, sha224, sha256, sha384, sha512]

    def hash_show(s): result = [] for func in hash_funcs: s_hash_obj = func(s) s_hash_hex = s_hash_obj.hexdigest() result.append((s_hash_obj.name, s_hash_hex, len(s_hash_hex))) return result

    if name == 'main': s = 'hello python' rs = hash_show(s) pprint(rs)

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
  • b. 一个 md5 的使用示例

    from hashlib import md5

    m1 = hashlib.md5() # 构造hash对象 m1.update('hello') m1.update(' ') m1.update('python')

    m2 = hashlib.md5('hello python')

    print m1.hexdigest() == m2.hexdigest() # 两种方式的效果相同

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • c. 使用 new(name, string=”) 构造新的哈系对象

    import hashlib

    h = hashlib.new('ripemd160', 'hello python') # ripemd160是一个160位的hash算法. ripemd系列算法基于md4, md5. print h.hexdigest()

    • 1
    • 2
    • 3
    • 4

3. hashlib的实现

Python 并没有在 hashlib 中提供各种hash算法的实现, 只是提供了一个接口调用.相当于 Linux 下的软链接或者 Windows 下的快捷方式一样. Linux 环境下, hashlib 中各hash函数的实现在 hashlib.x86_64-linux-gun.so 中(具体路径为 _/usr/lib/python2.7/lib- dynload/_hashlib.x86_64-linux-gun.so ,各不同版本或安装位置的不同,对应相关参数也不同).在系统未提供该共享库的情况下,其实现是 Python 内建的 _md5, _sha, _sha256以及 _sha512.

4. hashlib中各hash函数的介绍

  • md5: Message Digest Algorithm 5(消息摘要算法第五版)
    信息摘要算法可以用于确保信息传输完整一致.当然,也有用在加密上的,比如有的数据库在存储用户数据时,选择使用md5加密用户密码.也许,还有连用户名一起加密的.记得之前参加数学建模时,最终提交方案的时候就是用的md5做摘要.在 md5 之前有流行的 md2, md3与 md4 算法,后来罗纳德·李维斯特(Ronald L. Rivest.他就是rsa算法命名中的r,2002年的时候还得了图灵奖)继续改进发明了md5.该算法依然被大量使用,不过,由于其安全性问题,未来的话可能会越来越少的人继续使用了吧.

  • sha: Secure Hash Algorithm(安全哈希算法)
    sha是美国国家标准与技术研究院与美国国家安全局设计,从94年以来被广泛使用的加密算法.sha系列中的sha1, sha224, sha2556适用于长度不超过2^64二进制位的消息。sha384和sha512适用于长度不超过2^128二进制位的消息。不过,这个也不太安全.2005年的时候国内王小云教授及其团队在sha1算法的破译上就已经取得了很大的成就.今年谷歌已经攻破了sha1算法.另外,Matthew Green(https://twitter.com/matthew_d_green)在这一领域也有不错的成就.

0 评论

发表评论

精品游戏◆乐于分享


Title