1、基本介绍
DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的算法。该加密算法是一种对称加密方式,其加密运算、解密运算需要 使用的是同样的密钥(一组字符串)即可。
AES和DES的区别: 加密后密文长度的不同: DES加密后密文长度是8的整数倍 AES加密后密文长度是16的整数倍 应用场景的不同: 企业级开发使用DES足够安全 如果要求高使用AES
2、AES
AES加密的python实现
# 需要pip install pycryptodome
# 需要pip install pycrypto
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad # pad填充不够的位数(针对要加密的数据)unpad(去除填充)
import base64
# 以下是加密步骤,是固定的
# 这里是要加密的数据
s = "我昨天喝多了"
# 1、先创建加密器
# key是密钥(字节),且长度由要求(16 (*AES-128*), 24 (*AES-192*), or 32 (*AES-256*)字节)
# mode模式:要么是ECB,要么是CBC
# ECB:不需要给IV(偏移量)
# CBC:需要给IV
# IV:也是字节(一般为16字节)
aes = AES.new(key=b"abcdasdfadgsdwer", mode=AES.MODE_ECB)
# 2、加密或者解密,需要的参数是字节,且数据的长度是key的倍数
bs = s.encode("utf-8")
bs = pad(bs, 16) # 这里填充的位数的根据key的位数决定的
r = aes.encrypt(bs) # 加密
# aes.decrypt() #解密
print(r) # b'v\xfalc"\x18\x8b\x9anw\x1 aM\x1at{O4\xae}?\x8a\xaeu<\xe9\x85T\xa8\xf1\xc7p\xaf'
# 网页上的操作 通常把杂乱无章的字节,处理成base64字符串,方便数据的传输
ss = base64.b64encode(r).decode()
print(ss) # dvpsYyIYi5pudxpNGnR7TzSufT+KrnU86YVUqPHHcK8=
# 解密
# 1、先把拿到的字符串还原为字节
as1 = base64.b64decode(ss)
print(as1)
# 2、对字节进行解密操作,因为这是对称加密,所以key跟mode都要跟加密时的一样
aes1 = AES.new(key=b"abcdasdfadgsdwer", mode=AES.MODE_ECB)
s1 = aes1.decrypt(as1)
print(s1)
# 3、去除填充
s2 = unpad(s1, 16).decode("utf-8")
print(s2)
DES
DES加密的python实现
from Crypto.Cipher import DES
from Crypto.Util.Padding import pad, unpad # pad填充不够的位数(针对要加密的数据)unpad(去除填充)
import base64
# 以下是加密步骤,是固定的
# 这里是要加密的数据
s = "我昨天喝多了"
# 1、先创建加密器
# key是密钥(字节),DES的key是8个字节,且长度由要求(16 (*AES-128*), 24 (*AES-192*), or 32 (*AES-256*)字节)
# mode模式:要么是ECB,要么是CBC
# ECB:不需要给IV(偏移量)
# CBC:需要给IV
# IV:也是字节
aes = DES.new(key=b"abcdasdf", mode=DES.MODE_ECB)
# 2、加密或者解密,需要的参数是字节,且数据的长度是key的倍数
bs = s.encode("utf-8")
bs = pad(bs, 8) # 这里填充的位数的根据key的位数决定的
r = aes.encrypt(bs) # 加密
# aes.decrypt() #解密
print(r) # b'v\xfalc"\x18\x8b\x9anw\x1aM\x1at{O4\xae}?\x8a\xaeu<\xe9\x85T\xa8\xf1\xc7p\xaf'
# 网页上的操作 通常把杂乱无章的字节,处理成base64字符串,方便数据的传输
ss = base64.b64encode(r).decode()
print(ss) # dvpsYyIYi5pudxpNGnR7TzSufT+KrnU86YVUqPHHcK8=
# 解密
# 1、先把拿到的字符串还原为字节
as1 = base64.b64decode(ss)
print(as1)
# 2、对字节进行解密操作,因为这是对称加密,所以key跟mode都要跟加密时的一样
aes1 = DES.new(key=b"abcdasdfadgsdwer", mode=DES.MODE_ECB)
s1 = aes1.decrypt(as1)
print(s1)
# 3、去除填充
s2 = unpad(s1, 8).decode("utf-8")
print(s2)