python加密基本了解
pycrypto是一个加密算法库,几乎所有的加密算法都可以在它里面找到相应的实现模块
需要说明的是,上面SHA系列算法是根据生成的密文的长度而命名的各种算法名称,如SHA1(160bits)、SHA224、SHA256、SHA384等。我们常听说的MD5算法生成的密文长度为128bits。
可以参考《网络数据传输安全及SSH与HTTPS工作原理》https://www.cnblogs.com/yyds/p/6992125.html这篇博文来了解更多的信息
Python中的大部分功能都是通过模块提供的,因此我们主要是通过Python中提供的一些内置的模块或外部模块来实现上面提到的各种加密算法。使用过程也很简单,只需要调用这些模块提供的相应的函数接口即可。
1. Python内置的加密模块演化过程
上面我们已经提到过,单向加密算法有:MD5、SHA系列算法 和 HMAC,而到目前为止Python内置的用于实现数据加密的模块也主要是提供单向加密功能,并且这些模块随着Python版本的迭代也经历了一些调整和整合:
- Python2.5之前的版本所提供的加密模块有:md5、sha和hmac
- Python2.5开始把对md5和sha算法的实现整合到一个新的模块:hashlib;
- Python3.x开始去掉了md5和sha模块,仅剩下hashlib和hmac模块;
- Python3.6增加了一个新的可以产生用于密钥管理的安全随机数的模块:secrets。
md5模块和sha模块为什么会被整合到一个hashlib模块中呢? 因为md5模块提供的是MD5算法的实现,sha模块提供的是SHA1算法的实现,而MD5和SHA1都是hash算法,具体解释看下面的名词解释。
2. 相关名词解释
-
HASH: 一般翻译为“散列”(也有直接音译为“哈希”),就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变成固定长度的输出,该输出值就是散列值。这种转换是一种压缩映射,也就是散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一确认输入值。简单来说,hash算法就是一种将任意长度的消息压缩为某一固定长度的消息摘要的函数。
-
MD5: 全称为 Message Digest algorithm 5,即信息摘要算法。该算法可以生成定长的数据指纹,被广泛应用于加密和解密技术,常用于文件和数据的完整性校验。
-
SHA: 全称为 Secure Hash Algorithm,即安全散列算法/安全哈希算法。该算法是数字签名等密码学应用中的重要工具,被广泛应用于电子商务等信息安全领域。根据生成的密文的长度而命名的各种具体的算法有:SHA1(160bits)、SHA224(224bits)、SHA256(256bits)、SHA384(384bits)等。
-
HMAC: 全称为 Hash Message Authentication Code,即散列消息鉴别码。HMAC是基于密钥的哈希算法认证协议,主要是利用哈希算法(如MD5, SHA1),以一个密钥和一个消息作为输入,生成一个消息摘要作为输出,因此其具体的算法名称为HMAC-MD5、HMAC-SHA1等。可见HMAC算法是基于各种哈希算法的,只是它在运算过程中还可以使用一个密钥来增强安全性。Python内置模块简介
Python内置模块简介
下面这几段代码是等价的:
hash = hashlib.md5()
hash.update('Hello, ')
hash.update('World!')
hash = hashlib.md5()
hash.update('Hello, World!')
hash = hashlib.new('md5')
hash.update('Hello, World!')
hash = hashlib.new('md5', 'Hello, ')
hash.update('World!')
参见博文:https://www.cnblogs.com/yyds/p/7072492.html