对数据的一种保护措施;核心是密码学
常见的加密分以下三种类型:
单项加密 --> md5, base64对称加密 --> DES, AES非对称加密 --> RSA明文的文件或数据按照某种(加密)算法进行处理,使其变为不可读的(密文)
被加密的数据对象必须是二进制类型, 我们可以使用encode()和decode(), 在字符串和字节串之间相互转换
目前破解方式:穷举法 MD5算法的过程分为四步:处理原文,设置初始值,循环加工,拼接结果。
处理原文: 计算出原文长度(bit)对 512 求余的结果,如果不等于 448,就需要填充原文使得原文对 512 求余的结果等于 448。填充的方法是第一位填充 1,其余位填充 0。填充完后,信息的长度就是 512*N+448。
设置初始值: MD5 的哈希结果长度为 128 位,按每 32 位分成一组共 4 组。这 4 组结果是由 4 个初始值 A、B、C、D 经过不断演变得到。
import hashlib import base64 # 单向加密 temp = '哈哈哈' # 声明MD5加密算法对象 h = hashlib.md5() # 将数据更新到加密算法的对象 h.update(temp.encode()) # 十六进制 print(h.hexdigest()) # : bf17f4ab50fe9cb9e90ac041351d3946 # 二进制 print(h.digest()) # : b'\xbf\x17\xf4\xabP\xfe\x9c\xb9\xe9\n\xc0A5\x1d9F' # base64加密 s = h.hexdigest() print(base64.b64decode(s.encode())) # : b'm\xfd{\x7f\x86\x9b\xe7G\xde\xf5\xc6\xfd{\xdd\x1asN5\xdf\x9d]\xdf\xde:'明文——>加密(加密算法)——>密文 密文——>解密(相同算法逆运算)——>明文
密钥:是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数
AES与DES不同的是, 在使用时需要额外设置一个伪随机码(偏移量), 在加密时也会多一个参数
windows:pip install pycryptodomex ubuntu:pip install pycryptodome
DES加密/解密对象必须使用相同的密钥
AES加密/解密的对象必须使用相同的秘钥和伪随机码
加密和解密使用的是不同的秘钥(公钥/publickey,私钥/privatekey) 第一种用法:公钥加密,私钥解密。—用于加解密 第二种用法:私钥签名,公钥验签。—用于签名
算法强度复杂,安全性依赖于算法与密钥。
其安全性更好,对称加密的通信双方使用相同的秘钥,如果一方的秘钥遭泄露,那么整个通信就会被破解。而非对称加密使用一对秘钥,一个用来加密,一个用来解密,而且公钥是公开的,秘钥是自己保存的,不需要像对称加密那样在通信之前要先同步秘钥。
由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。
pip install rsa
1. 为什么说单向加密是不可逆,而密钥加密可逆,简单谈谈你的理解 根本原因就是单向加密产生的值的数量是有限的, 如果单向加密可逆,别人得到了你的密文,就可以倒推出你的密码或隐私信息, 这是极不安全的一点。因此, 用户只有通过输入相同的明文, 服务器通过再次加密, 让得到的密文与原来的密文进行比对, 才能安全的完成身份验证, 这就是为什么单向加密不可逆。打个比方, 就像是现在比较流行的刷脸支付, 只有本人站在摄像头前, 且有大部分是可复译的(例如拿到一个MD5密文, 而后台处理相貌特征的算法就类似于单向加密 。 而密钥加密, 生成的是一组毫无规律的密文, 但这串密文是基于定义的密钥生成的, 只有拥有密钥的人, 才可以破译出明文 , 才可以完成身份验证。以对称加密为例, 就像一把锁对应一把钥匙, 只有有钥匙的人才能开锁, 而非对称加密, 就相当于, 锁住需要一把钥匙(公钥), 解锁需要另一把钥匙(私钥),从而使得这种密钥加密是可逆的。