Python中的hashlib和hmac加密模块都是内置模块,可以方便的进行字符串加密,这些加密都是单向的,加密后的字符串不可反解成原字符串。但是由于某个固定的字符串使用某个固定的算法得出的加密串是固定的,所以有通过撞库来反解出密码的危险
Python Version: 3.5+
hashlib模块
md5
hashlib模块用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| import hashlib
hash = hashlib.md5()
hash.update(bytes('polarsnow', encoding='utf8'))
print(hash.hexdigest())
print(hash.digest())
------------ 72c5c8f4fcfeb39c1ebce3be56ebb9f8 b'r\xc5\xc8\xf4\xfc\xfe\xb3\x9c\x1e\xbc\xe3\xbeV\xeb\xb9\xf8'
|
sha1
1 2 3 4 5 6 7 8 9 10 11
| import hashlib
hash = hashlib.sha1()
hash.update(bytes('polarsnow', encoding='utf8')) print(hash.hexdigest())
------------ 299a06d4672c5a57facee0cf132593132084a3c0
|
sha256
1 2 3 4 5 6 7 8 9
| import hashlib
hash = hashlib.sha256() hash.update(bytes('polarsnow', encoding='utf8')) print(hash.hexdigest())
------------ f379eefa6d3a0447d807d679dbd02f0593e8b3c3377da53dd909d98b4dcac9ad
|
sha384
1 2 3 4 5 6 7 8 9
| import hashlib
hash = hashlib.sha384() hash.update(bytes('polarsnow', encoding='utf8')) print(hash.hexdigest())
------------ 768e16e89a691905e7e2413fc67ba2846a39a3d2dd064a7930eb54c36e58a2694b5bf57ca7bb52cea0ad33feaf718ad6
|
sha512
1 2 3 4 5 6 7 8 9
| import hashlib
hash = hashlib.sha512() hash.update(bytes('polarsnow', encoding='utf8')) print(hash.hexdigest())
------------ ef510ae0c752261359b87e8260b1a8d90a1d9bc373fd5a107e091e9340d60877909b1e7996c32ecb5a571378815aa524e284a65d7d91d33b8fe29f1376ff048e
|
自定义key加密
上面的加密算法虽然已经足够强大,但是还是存在缺陷,即可以通过撞库反解密码。所以,有必要对加密算法中添加自定义key再来做加密。
1 2 3 4 5 6 7 8 9 10
| import hashlib
hash = hashlib.md5(bytes('9ol4rfv', encoding='utf8')) hash.update(bytes('polarsnow', encoding='utf8'))
print(hash.hexdigest()
------------ 6e4257d3855aaf563ce5c8d499156137
|
hmac模块
hmac 模块,它内部对我们创建 key 和 内容 进行进一步的处理然后再加密
1 2 3 4 5 6 7 8
| import hmac
h = hmac.new(bytes('9ol4rfv', encoding="utf-8")) h.update(bytes('polarsnow', encoding="utf-8")) print(h.hexdigest())
------------ 2d7acf84247e563213d0ec8e325831ba
|