Python全系列 教程
3567个小节阅读:5931.8k
目录
鸿蒙应用开发
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
https://pycryptodome.readthedocs.io/en/latest/src/introduction.html
DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的算法。该加密算法是一种对称加密方式,其加密运算、解密运算需要使用的是同样的密钥(一组字符串)即可
注意
现在用AES这个标准来替代原先的DES
AES与DES的区别:
加密后密文长度不同:
- DES加密后密文长度是8的整数倍
- AES加密后密文长度是16的整数倍
应用场景的不同:
- 企业级开发使用DES足够安全
- 如果要求使用AES
使用DES/AES进行数据交互时要求双方都拥有相同的私钥
xxxxxxxxxx
pip3 install pycryptodome==3.15.0
xxxxxxxxxx
from Crypto.Cipher import DES
import base64
class EncryptDate:
def __init__(self,key) -> None:
# 初始化密钥
self.key = key
# 创建加密的对象
self.des = DES.new(self.key, DES.MODE_ECB)
def add_8(self,data):
# 判断数据长度是不是8的倍数
while len(data) % DES.block_size !=0:
# 补齐数据长度
data += b'\x00'
return data
def encrypt(self,data):
'''
data:bytes
return: base64_str
'''
data = self.add_8(data)
# 数据加密
rs = self.des.encrypt(data)
# 将加密后的数据转换为base64格式
rs = str(base64.b64encode(rs),encoding='utf-8')
return rs
def decrypt(self,data):
'''
data:base64_str
return: bytes
'''
# base64解码
rs = base64.decodebytes(data.encode('utf-8'))
# 数据解密
return self.des.decrypt(rs)
if __name__ =='__main__':
key=b'12345678'
data = b'itbaizhan'
# 创建加密的对象
en = EncryptDate(key)
# 数据加密
en_data = en.encrypt(data)
den_data = en.decrypt(en_data).decode()
print('加密后的数据:',en_data)
print('解密后的数据:',den_data)
xxxxxxxxxx
from Crypto.Cipher import AES
import base64
class EncryptDate:
def __init__(self,key) -> None:
# 初始化密钥
self.key = key
# 创建加密的对象
self.des = AES.new(self.key, AES.MODE_ECB)
# ValueError: Data must be aligned to block boundary in ECB mode
def add_8(self,data):
# 判断数据长度是不是8的倍数
while len(data) % AES.block_size !=0:
# 补齐数据长度
data += b'\x00'
return data
def encrypt(self,data):
'''
data:bytes
return: base64_str
'''
data = self.add_8(data)
# 数据加密
rs = self.des.encrypt(data)
# 将加密后的数据转换为base64格式
rs = str(base64.b64encode(rs),encoding='utf-8')
return rs
def decrypt(self,data):
'''
data:base64_str
return: bytes
'''
# base64解码
rs = base64.decodebytes(data.encode('utf-8'))
# 数据解密
return self.des.decrypt(rs)
if __name__ =='__main__':
key=b'1234567890123456'
data = b'itbaizhan'
# 创建加密的对象
en = EncryptDate(key)
# 数据加密
en_data = en.encrypt(data)
den_data = en.decrypt(en_data).decode()
print('加密后的数据:',en_data)
print('解密后的数据:',den_data)
实时效果反馈
1. 关于DES与AES, 说法错误的是?
A DES/AES都是对称加密算法
B DES/AES功能是要一模一样
C DES/AES的秘钥用来加密数据
D DES/AES的秘钥用来解密数据
答案
1=>B