python3下的pycryptodome库
from Crypto.cipher import * if __name__ == '__main__':message = '123'#MD5和SHA的用法差不多print("SHA3_512: " + SHA3_512.new(message.encode('utf-8')).digest().hex())print("SHA512: " + SHA512.new(message.encode('utf-8')).digest().hex())print("MD5: " + MD5.new(message.encode('utf-8')).digest().hex())print("BLAKE2S: " + BLAKE2s.new(data = message.encode('utf-8')).digest().hex())#HMAC.new(密钥,需要处理的消息,处理的哈希方法)key = 'ABCD'print("HMAC-SHA224: " + HMAC.new(key.encode('utf-8'), message.encode('utf-8'), SHA224).digest().hex())#SHANK的使用也类似print("SHAKE128: " + SHAKE128.new(message.encode('utf-8')).read(64).hex())
注意:
1、我使用的pycryptodome版本为3.9.9,之前是使用了3.4.6会有很多奇怪的问题。可以这样升级
pip install --upgrade pycryptodome
或
pip install --upgrade pycryptodome --user
2、
原本的__init__文件可能会缺少一些类,使用SHA3的时候会报错,需要修改下
__all__ = ['HMAC', 'MD2', 'MD4', 'MD5', 'RIPEMD160', 'SHA1','SHA224', 'SHA256', 'SHA384', 'SHA512', 'CMAC', 'Poly1305','SHA3_224', 'SHA3_256', 'SHA3_384', 'SHA3_512', 'SHAKE128', 'SHAKE256']
3、
SHAKE的read函数中的数值表示字节数,打印的结果2个字符表示1个字节。