介绍hashlib

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

import hashlib

m = hashlib.md5()
print(m)

m.update('hello world'.encode('utf-8'))
print(m.hexdigest())

m.update('pis'.encode('utf-8'))
print(m.hexdigest())

m2 = hashlib.md5()
m2.update('hello worldpis'.encode('utf-8'))
print(m.hexdigest())

s=hashlib.sha256()
s.update('hello world'.encode('utf-8'))
print(s.hexdigest())

<md5 HASH object @ 0x011F56E0>
5eb63bbbe01eeed093cb22bb8f5acdc3
195dce4dff55989fe6508ef45b525d8b
195dce4dff55989fe6508ef45b525d8b
b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9

 

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'.encode('utf-8')
    rs = hash_show(s)
    pprint(rs)

 

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()    # 两种方式的效果相同

 

c. 使用 new(name, string=”) 构造新的哈系对象

import hashlib

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