1. 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
【常用方法介绍:】
名称 | 描述 |
---|---|
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'