Python-常用的两个Hash模块

版权声明:转载请注明出处。 https://blog.csdn.net/paopaohll/article/details/83143874

1. CRYPT模块

CRYPT官网

【常用方法/常量介绍:】

名称 类型 描述
crypt() 方法 对指定内容进行hash加密
methods() 方法 返回可以用到的加密算法
mksalt() 方法 根据加密算法生成salt
METHOD_MD5 常量 md5加密算法
METHOD_SHA256 常量 sha256加密算法
METHOD_SHA512 常量 sha512加密算法

crypt.METHOD_SHA512 模块化加密格式方法,具有16个字符的salt和86个字符的哈希值。这是最强的方法。

crypt.METHOD_SHA256 另一种Modular Crypt Format方法,包含16个字符的salt和43个字符的hash。

crypt.METHOD_MD5 另一种Modular Crypt Format方法,带有8个字符的salt和22个字符的hash。

crypt.METHOD_CRYPT 传统方法使用2个字符的salt和13个字符的哈希值。这是最弱的方法。

【使用说明:】

 crypt.crypt(plaintext,salt)

如果不指定salt,系统就会调用crypt.mksalt()生成一个salt

# 生成salt
salt = crypt.mksalt(crypt.METHOD_SHA256)
salt  # '$5$4l.2pWyDPUQR5IRx'
# 需要hash的文本
plaintext = 'mypassword'
# 进行hash
hp = crypt.crypt(plaintext,salt)
hp # '$5E7Spixsc5OI'

2.HASHLIB

HASHLIB官网

【常用方法介绍:】

名称 描述
md5() 利用md5算法加密
sha1() 利用sha1算法加密
sha224() 利用sha224算法加密
sha256() 利用sha256算法加密
sha384() 利用sha384算法加密
sha512() 利用sha512算法加密
update(arg) 可以重复利用指定了特殊加密算法的Hash对象,对arg进行加密
digest() 以字符形式返回加密内容
hexdigest() 以16进制形式返回加密内容
copy() 为了达到重复利用Hash对象的目的,而克隆Hash对象

散列算法,总是存在该模块中的构造是 sha1(),sha224(),sha256(),sha384(), sha512(),blake2b(),和blake2s()。 md5()通常也是可用的,但如果您使用的是罕见的“FIPS兼容”Python版本,它可能会丢失。根据Python在您的平台上使用的OpenSSL库,还可以使用其他算法。在大多数平台上 sha3_224(),sha3_256(),sha3_384(),sha3_512(), shake_128(),shake_256()也可提供。

【使用说明:】

plaintext = 'mypassword'

# 直接hash
hashlib.sha256(plaintext.encode('utf-8')) # <sha256 HASH object @ 0x105300da0>
'''
#sha256不能反解,但是加密是固定的,就是关系是一一对应,所以有缺陷,可以被对撞出来
'''

hashlib.sha256(plaintext.encode('utf-8')).digest() # b'\x89\xe0\x156\xac ry@\x9dM\xe1\xe5%>\x01\xf4\xa1v\x9eim\xb0\xd6\x06,\xa9\xb8\xf5gg\xc8'
hashlib.sha256(plaintext.encode('utf-8')).hexdigest() # '89e01536ac207279409d4de1e5253e01f4a1769e696db0d6062ca9b8f56767c8'


# 设置加密参数,通过update实现hash
plaintext = 'mypassword'
hb = hashlib.sha256('abc'.encode('utf-8')) # <sha256 HASH object @ 0x10bbbf558>
''' 如果添加参数,那么sha256将生成一个自定的规则,遵守自定规则,生成同一个对应关系,
就是在原先加密的基础上再加密一层,这样的话参数只有自己知道,防止被破解。
'''
hb.update(plaintext.encode('utf-8'))
hb.digest()  # b'\xbax\x16\xbf\x8f\x01\xcf\xeaAA@\xde]\xae"#\xb0\x03a\xa3\x96\x17z\x9c\xb4\x10\xffa\xf2\x00\x15\xad'
hb.hexdigest() # 'ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad'

猜你喜欢

转载自blog.csdn.net/paopaohll/article/details/83143874