单向加密算法

2021-12-21  本文已影响0人  忘了呼吸的那只猫

单向加密算法,又称哈希函数、散列函数、杂凑函数、摘要算法,英文名One-way encryption algorithm

单向加密如其名只能加密不能解密(彩虹表攻击不能算是正经的解密方式),不能解密的原因是本质上并不是用IV(Initial Vector)去加密M输出M的密文,而是用M去加密IV输出IV的密文。

用途:消息认证摘要、内容或文档的数字指纹、口令存储。

单向加密又可以分为hashhmac两大类,hmachash的算法是一样的,其实可以认为hmac就是hash加盐的形式(不过这盐值不是hash中常用的拼接在最前边或拼接在最后边,具体怎么拼接的我不太确定)。

一般来说标准库就挺好用时我们一般就直接用标准库,python的标准库就能容易地实现单向加密算法,所以单向加密我们使用标准库实现。

pythonhash类算法使用hashlib库实现,hmac类算法使用hmac库实现。

标准库支持的单向加密算法

import hashlib # 注意输出结果中各算法使用大写和小写写了两遍 
# 同时也是说到后边的书写中算法名大写或小写都是可以的
hashlib.algorithms_available

使用hashlib实现hash算法(以md5为例)
import hashlib

# 实例化方法一,直接使用算法名;这种形式不完全支持hashlib.algorithms_available中的算法
# m = hashlib.md5()
# 实例化方法二,使用new方法;所有支持的算法名看上边hashlib.algorithms_available
m = hashlib.new("md5")
# update内是要加密的内容
# update使用+=,即连续多次update表示在原先内容上追加而不是替换
m.update(b"123456")
# 以十六进制字符串形式输出
m.hexdigest()

使用hmac实现hmac算法(以sha1为例)

import hmac

# 实例化原形是hmac.new(key, msg=None, digestmod=None)
# key--加密用的盐值
# msg--要加密码的内容,可为空而后用update方法设置
# digestmod--加密算法,默认为md5,所有支持的算法名看上边hashlib.algorithms_available
m = hmac.new(b"123",digestmod="sha1")
# update使用+=,即连续多次update表示在原先内容上追加而不是替换
# 但要注意所谓的+=是msg之间的+=,而不是key和msg之间的+=
# 即使用以下update后等价于hmac.new(b"123",b"123456", digestmod="sha1"),而不是hmac.new(b"123123456", digestmod="sha1")
m.update(b"123456")
# 以十六进制字符串形式输出
m.hexdigest()

ps:除了标准库,python三方库pycryptodome提供了更加完备的加密方式,包括对称加密和非对称加密
上一篇下一篇

猜你喜欢

热点阅读