文章目录
- 一、汇总
- 二、base64加密-(无密钥)
- 三、哈希Hash加密算法
-
-
- 1、简介
- 2、哈希碰撞
- 3、Hash算法的性质 :
- 4、Hash算法的用途:
- (1) 检验信息是否相同
-
- (2)密码加密
- 5、MD5加密算法
- 6、SHA256加密
-
- 四、对称加密算法-- AES
-
-
- 1、介绍
- 2、原理
- 3、python实现
-
- 五、非对称加密算法-- RSA
-
-
- 1、原理
- 2、Python实现
-
一、汇总
加密算法分类:
1-Base64编码
2-哈希算法
3-对称加密算法
4-非对称加密算法
python中常用的数据加密算法:
1-Base64编码
2-MD5加密算法(哈希)
3-SHA256加密算法(哈希)
4-RSA加密算法(非对称加密)
由于加密算法的特点不同,所以使用的场合也不同。
1-用户登录,一般采用MD5算法、RSA算法
2-数据完整性校验,一般采用MD5算法
3-Token,一般采用Base64编码
二、base64加密-(无密钥)
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。
在网络应用领域,常有人将BASE64编码误称为加密。实际上,BASE64只是一种将二进制数据转换为可打印字符的编码方式,不具备加密特性。它的主要应用是实现不同设备和平台间的二进制数据传输及特定协议和规范中的处理。
import base64
#base64加密
def encode_base64(val):
ret = base64.b64encode(val)
return ret
#base64解密
def decode_base64(val):
ret = base64.b64decode(val)
return ret
假如通过邮件发送字符串“Hello, World!”,因邮件客户端不支持特殊符号,需先将文本进行BASE64编码。编码过程如下:
- 将字符串“Hello, World!”转换成二进制数据:
01001000 01100101 01101100 01101100 01101111 00101100 00100000 01010111 01101111 01110010 01101100 01100100 00100001 - 将二进制数据按6比特进行划分:
010010 000110 010101 101100 011011 001101 101111 001011 001000 001010 110111 011011 100010 110110 001100 010001 - 将得到的每个6比特组对应到BASE64字符表中:
SGVsbG8sIFdvcmxkIQ==
这样,收件人收到BASE64编码后的字符串SGVsbG8sIFdvcmxkIQ==
,
三、哈希Hash加密算法
1、简介
Hash加密算法是一种将任意长度的消息压缩成固定长度散列值的算法。
它的特点是快速、不可逆和安全。
Hash加密算法被广泛用于数字签名、数据完整性验证等信息安全领域。
Hash加密算法通过将任意长度的消息输入到算法中,经过一系列计算得到一个固定长度的Hash值。Hash值可以看作是消息的指纹,具有唯一性和不可逆性。
对于相同的消息,执行相同的Hash算法得到的Hash值是相同的,但即使是输入消息的微小变化也会导致Hash值的巨大变化。因此,Hash加密算法可以用于验证数据完整性和数字签名等场景。
哈希加密算法提供:MD5加密、SHA-1加密、SHA-2加密、SHA-256加密、SHA-512加密、SHA-3加密、RIPEMD-160加密等各种加密工具。
2、哈希碰撞
哈希碰撞是指:两个不同的输入得到了相同的输出。
"AaAaAa".hashCode(); // 0x7460e8c0
"BBAaBB".hashCode(); // 0x7460e8c0
"通话".hashCode(); // 0x11ff03
"重地".hashCode(); // 0x11ff03
碰撞能不能避免?答案是不能。碰撞是一定会出现的,因为输出的字节长度是固定的, String 的 hashCode() 输出是 4 字节整数,最多只有 4294967296 种输出, 但输入的数据长度是不固定的,有无数种输入。所以,哈希算法是把一个无限的输入 集合映射到一个有限的输出集合,必然会产生碰撞。 碰撞不可怕,我们担心的不是碰撞,而是碰撞的概率,因为碰撞概率的高低关系 到哈希算法的安全性。一个安全的哈希算法必须满足: 碰撞概率低; 不能猜测输出。 不能猜测输出是指:输入的任意一个 bit 的变化会造成输出完全不同,这样就很难从输出反推输入(只能依靠暴力穷举)。
3、Hash算法的性质 :
- 单向性。即给定一个输入数,容易计算出它的哈希值,但是已知一个哈希值根据同样的算法不能得到原输入数。
- 弱抗碰撞性。即给定一个输入数,要找到另一个得到给定数的哈希值,在使用同一种方法时,在计算上不可行。
- 强抗碰撞性。即对于任意两个不同的输入数,根据同样的算法计算出相同的哈希值,在计算上不可行。
- 雪崩效应:当一个输入未发生变化时输出位将有一半发生变化。
4、Hash算法的用途:
(1) 检验信息是否相同
它可以检验信息是否是相同的,这样的优势是可以节省重复数据传送的时间。就像我们在一些网盘中上传的文件,如果文件内容相同的话,哪怕属于不同的用户,也可以通过对比哈希值避免向服务器重复上传相同的文件,可以很大程度上节约存储资源,提高存储效率。
我们在网上下载文件,在本地校验,以保证文件未被篡改:
import hashlib
with open("D:\python-3.11.1-amd64.exe", 'rb') as f:
m1 = hashlib.md5(f.read())
print('该文件校验值为:' + m1.