python中AES加密和解密
发表于:2024-07-02 10:38:21浏览:144次
引言
在python中如何使用AES进行加密解密?直接放出放源码
类
import base64
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad,unpad
import random
import string
"""
AES加密解密
需要安装 pip install pycryptodome
"""
class Aes():
def __init__(self) -> None:
pass
"""
ECB模式的加密
:param data: 明文
:param key: 16字节密钥
:return: 密文
"""
def ecbEncrypt(self,data,key):
data = pad(data.encode('utf-8'),AES.block_size)
aes = AES.new(key=key.encode('ascii'),mode=AES.MODE_ECB)
result = base64.b64encode(aes.encrypt(data))
return str(result,'utf-8')
"""
ECB模式的解密
:param data: 密文
:param key: 16字节密钥
:return: 明文
"""
def ecbDecrypt(self,data,key):
key = key.encode('utf-8')
aes = AES.new(key=key,mode=AES.MODE_ECB)
result = aes.decrypt(base64.b64decode(data))
result = unpad(result,AES.block_size)
return str(result,'utf-8')
"""
CBC模式的加密
:param data: 明文
:param key: 16字节密钥
:param iv: 偏移量
:return: 密文
"""
def cbcEncrypt(self,data,key,iv):
key = key.encode('utf-8')
iv = iv.encode('utf-8')
data = pad(data.encode('utf-8'),AES.block_size)
aes = AES.new(key=key,mode=AES.MODE_CBC,iv=iv)
result = base64.b64encode(aes.encrypt(data))
return str(result,'utf-8')
"""
CBC模式的解密
:param data: 密文
:param key: 16字节密钥
:param iv: 偏移量
:return: 明文
"""
def cbcDecrypt(self,data,key,iv):
key = key.encode('utf-8')
iv = iv.encode('utf-8')
aes = AES.new(key=key,mode=AES.MODE_CBC,iv=iv)
result = aes.decrypt(base64.b64decode(data))
result = unpad(result,AES.block_size)
return str(result,'utf-8')
"""
生成一个指定长度的随机字符串,包含大小写字母和数字。
:param length: 字符串的长度,默认为16。
:return: 一个随机字符串。
"""
def randomString(self,length=16):
chars = string.ascii_letters + string.digits
return ''.join(random.choice(chars) for _ in range(length))
"""
生成一个指定长度的随机数字。
:param length: 字符串的长度,默认为16。
:return: 一个随机数字。
"""
def randomInt(self,length=16):
return str(random.randint(10**(length-1), (10**length)-1))
# 调用示例
# aes = Aes()
# plaintext = 'https://blog.dazijie.com/这个博客真是太棒了'
# key = aes.randomString()
# iv = aes.randomInt()
# b = aes.ecbEncrypt(plaintext,key)
# b1 = aes.ecbDecrypt(b,key)
# c = aes.cbcEncrypt(plaintext,key,iv)
# c1 = aes.cbcDecrypt(c,key,iv)
# print("加密前长度:{},加密前字符串为:{}\n加密后长度:{},ECB加密后字符串:{}\n解密后长度:{},解密后字符串:{}\n".format(len(plaintext),plaintext,len(b),b,len(b1),b1))
# print("加密前长度:{},加密前字符串为:{}\n加密后长度:{},CBC加密后字符串:{}\n解密后长度:{},解密后字符串:{}".format(len(plaintext),plaintext,len(c),c,len(c1),c1))
"""
输出
加密前长度:34,加密前字符串为:https://blog.dazijie.com/这个博客真是太棒了
加密后长度:88,ECB加密后字符串:HNDvaWEPdUqTkeIiULdQJra2sGJ8qnwVlRsnJjcYFbiVVZmGJjT76/EJhlqko+40HTd+pY7fkPuHHEb3UHdYqw==
解密后长度:34,解密后字符串:https://blog.dazijie.com/这个博客真是太棒了
加密前长度:34,加密前字符串为:https://blog.dazijie.com/这个博客真是太棒了
加密后长度:88,CBC加密后字符串:xmbyhjHq1EBPRhsDekNI5e1rVR1czMXnYwipnmJ7IzYvgamUIY8HihVB6l2LsKgwXmngc+UIMwmGC9HqQyIkrQ==
解密后长度:34,解密后字符串:https://blog.dazijie.com/这个博客真是太棒了
"""
栏目分类全部>