python的hashlib模块
# -*- coding: utf-8 -*- """python 的MD5 sha1 模块""" import hashlib #md5的例子 m = hashlib.md5() m.update(b"Hello 123") m.update(b" Hello 456") print(m.digest()) #字节串 print(m.hexdigest())#字符串 print(m.digest_size)#16 print(m.block_size)#64 #也可以一次处理 print(hashlib.md5(b"Hello 123 Hello 456").hexdigest()) """模块函数 hashlib.new(name[,data]) name:算法的名字 data:字节数据 hashlib.algorithms_guaranteed 所有平台支持的算法 {'sha1', 'sha256', 'sha384', 'md5', 'sha512', 'sha224'} hashlib.algorithms_available 返回python可用的算法,可用于new(),guaranteed是它的子集 {'RIPEMD160', 'sha1', 'sha256', 'SHA256', 'sha', 'dsaEncryption', 'MD5', 'SHA224', 'SHA384', 'DSA-SHA', 'dsaWithSHA', 'sha224', 'md4', 'MD4', 'whirlpool', 'SHA', 'sha384', 'ripemd160', 'md5', 'SHA1', 'sha512', 'DSA', 'SHA512', 'ecdsa-with-SHA1'} hash对象属性 hash.digest_size 结果的大小 hash.block_size 块大小 hash.name 名字 hash.update(arg) 看例子 hash.digest() 字节串 hash.hexdigest() 字符串 hash.copy() 返回hash对象的拷贝 用于密码加密 hashlib.pbkdf2_hmac(hash_name, password, salt, iterations, dklen=None) hash_name 算法名称 password 要加密的密码 salt 建议16字节或更长 iterations 迭代次数,取决于算法和计算能力, dklen 结果长度 返回值是字节串 """ #测试迭代用时 #100000 0.0625 秒出结果 #1000000 0.63 小卡一下 #10000000 6.2 不可接受 #... #10000000000 超出最大值 import binascii from datetime import datetime t1 = datetime.now() dk = hashlib.pbkdf2_hmac('md5', b'password', b'salt', 100000) t2 = datetime.now() t = (t2 - t1).seconds + (t2 - t1).microseconds / 1000000 print(t) m = binascii.hexlify(dk) print(m)