一 数据加密概述
1.数据加密传输过程中遇到的威胁
- 数据窃听与机密性 如何保证数据在传输过程中不被拦截
- 数据篡改以及完整性 如何保证在传输过程中被篡改而返回假数据
- 身份冒充和身份验证 如何保证传输对方身份无误
2.解决方案
加密方式 | 描述信息 | 解决的主要问题 | 常用算法 |
---|---|---|---|
对称加密 | 指数据加密和解密使用相同的密钥 | 数据的机密性 | DES, AES |
非对称加密 | 也叫公钥加密,指数据加密和解密使用不同的密钥--密钥对儿 | 身份验证 | DSA,RSA |
单向加密 | 指只能加密数据,而不能解密数据 | 数据的完整性 | MD5,SHA系列算法 |
ps:上面SHA系列算法是根据生成的密文的长度而命名的各种算法名称,如SHA1(160bits)、SHA224、SHA256、SHA384等。我们常听说的MD5算法生成的密文长度为128bits
二 python中实现数据加密模块的介绍
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,即信息摘要