本篇记录使用 AES(ECB模式)+Base64 如何进行加密与解密

函数名称 函数使用注意事项
pkcs7padding() 该方法主要用于对需要加密的明文处理
因为明文 text 也必须为16字节或者16字节的倍数的字节型数据
计算需要填充的字符数量并与明文拼接,从而得到符合加密规则的明文数据
AES_Encryption() 该方法需要传入 密钥secret_key、明文text
其中密钥长度和明文长度需要满足16的倍数,但一般密钥规则都是16位
所以方法中传递的明文text需要调用 pkcs7padding()方法进行填充处理
AES_Decrypt() 该方法需要传入 密钥secret_key、密文ciphertext
其中密文 ciphertext 的长度要求为3的倍数
因为Base64编码后的字符除了英文字母和数字外还有三个字符’ + / =‘
其中’='只是为了补全编码后的字符数,所以可以用于密文填充处理

示例代码如下:

# -*- coding: utf-8 -*-
# @Desc      :  AES加密、解密方法
# -*- -*- -*- -*- -*- -*-
import base64
from Crypto.Cipher import AESdef pkcs7padding(text):"""明文使用PKCS7填充,padding:凑篇幅的文字 """# 明文 text 也必须为16字节或者16字节的倍数的字节型数据need_size = 16# 获取明文的长度text_length = len(text)# 获取明文编码转换后的字符长度bytes_length = len(text.encode('utf-8'))# 判断明文长度与编码转换后的字符长度是否相等# 1、如相等,返回明文长度length; 2、如不相等,返回编码转换后的字符长度bytes_lengthpadding_size = text_length if (bytes_length == text_length) else bytes_length# 获取需要填充的字节数:16-(明文数据长度 % 16)padding = need_size - padding_size % need_size# 使用 chr(十进制整数) 方法从ASCII码表中获取对应编号的字符,并乘以字节个数,以获取需要填充的数据padding_text = chr(padding) * padding# 返回使用PKCS7填充后的数据:明文+需要填充的数据,使明文长度为16的倍数return text + padding_textdef AES_Encryption(secret_key=None,text=None):""" AES加密 ,python运行处理的是 unicode码,因此,在做编码转换时,通常需要以unicode作为中间编码 """# 秘钥 secret_key 必须为16字节或者16字节的倍数的字节型数据【项目中一般都是16字节】if (secret_key is None) or len(secret_key) == 0:secret_key = "1234567812345678"# 明文 text 也必须为16字节或者16字节的倍数的字节型数据,所以我们需要调用PKCS7填充明文的方法text =  pkcs7padding(text)# 1、创建一个aes对象,AES.MODE_ECB 表示模式是ECB模式aes = AES.new(secret_key.encode("utf-8"), AES.MODE_ECB)# 2、对明文进行编码加密en_text = aes.encrypt(text.encode('utf-8'))# 3、通过base64编码重新进行一次编码result = str(base64.b64encode(en_text), encoding='utf-8')return resultdef AES_Decrypt(secret_key=None, ciphertext=None):"""AES解密,ciphertext:密文"""# 秘钥 secret_key 必须为16字节或者16字节的倍数的字节型数据【项目中一般都是16字节】if (secret_key is None) or len(secret_key) == 0:secret_key = "1234567812345678"# 1、创建一个aes对象,AES.MODE_ECB 表示模式是ECB模式aes = AES.new(secret_key.encode('utf-8'), AES.MODE_ECB)# 2、解密规则与加密规则有所不同,密文长度需要是3的倍数if len(ciphertext) % 3 == 1:ciphertext += "==" # 如果余数为1,则填充两个等号==,长度凑3elif len(ciphertext) % 3 == 2:ciphertext += "=" # 如果余数为2,则填充一个等号=,长度凑3# 3、将密文先进行base64反编译content = base64.b64decode(ciphertext)# 4、讲反编译后的密文通过AES解密text = aes.decrypt(content).decode('utf-8')return textres = AES_Encryption(secret_key="1234567812345678",text="abc我的错")
print("加密后的密文是:",res)res = AES_Decrypt(secret_key="1234567812345678",ciphertext="iGaMr8nHU5V6UwbLYf1g5g==")
print("密文解密后的明文是:",res)

Python:AES+Base64的加密与解密(ECB模式)相关推荐

  1. python aes 加盐 加密解密

    python aes 加盐 加密解密 爬虫就是在学习的过程,前几天从某网站的js里学到的加密方式,通过下断点弄清加密原理后,用python复现一下,在这里和大家分享下 #--------引入模块--- ...

  2. base64编码 vba_VB VBA ASP 可通用的基于Base64进行加密和解密的函数

    VB VBA ASP 可通用的基于Base64进行加密和解密的函数 可用于Access VBA 以及 Excel VBA对字符串 数据甚至文本文件进行加密和解密,以保证您数据的安全. 先创建一个模块, ...

  3. 实用脚本!利用 Python 对 PDF 进行加密、解密操作,代码拿走就用!

    来源/早起Python 本文将分享如何利用 Python 对 PDF 进行加密和解密操作,主要利用到之前多次介绍过的PyPDF2 模块. PDF 加密 在之前的文章PDF合并.拆分.水印.加密中简单提 ...

  4. python实现字母的加密和解密 字典_python实现AES加密与解密

    AES加密方式有五种:ECB, CBC, CTR, CFB, OFB 从安全性角度推荐CBC加密方法,本文介绍了CBC,ECB两种加密方法的python实现 python 在 Windows下使用AE ...

  5. 对称加密----AES和DES加密、解密

    目前主流的加密方式有:(对称加密)AES.DES        (非对称加密)RSA.DSA 调用AES/DES加密算法包最精要的就是下面两句话: Cipher cipher = Cipher.get ...

  6. Python基于AESSHA1PRNG 算法 加密与解密

    因工作需要,需要对aes进行加解密,收集资料时从网上找到了核心写法代码,经小量修改满足了需求. 核心加.解密代码来自原文: https://blog.csdn.net/max229max/articl ...

  7. AES加解密(ECB模式)

    AES加密是对称的,对称加密是啥?公钥和密钥是一个,一个密钥可以用它来加密数据和解密数据,安全性低于非对称加密. 非对称加密是啥?甲方生成一对密钥并将公钥公开,需要向甲方发送信息的其他角色(乙方)使用 ...

  8. C#Base64简单加密与解密

    Base64属于简单加密算法的一种.类似于凯撒密码[它是一种替换加密的技术] Base64字符串由65个字符组成, 大写字母A~Z, 小写字母a~z, 数字0~9,以及三个特殊字符+./.=   [= ...

  9. python实现字母的加密和解密 字典_利用Python产生加密表和解密表的实现方法

    序言: 这是我第一次写博客,有不足之处,希望大家指出,谢谢! 这次的题目一共有三个难度,分别是简单,中等偏下,中等.对于一些刚刚入门的小伙伴来说,比较友好.废话不多说,直接进入正题. 正文: 简单难度 ...

最新文章

  1. 实践lnmpde 的安装
  2. gradle本地、远程仓库配置--转
  3. Linux_linux常用工具之make/makefile详解
  4. PHP对数组的高级遍历和操作处理方法
  5. 客户端(前端)Ajax中Get请求和Post请求的区别
  6. 开源不等于免费!谷歌如何通过安卓开源成为移动时代霸主? | 涛滔不绝
  7. J2ME游戏开发感想
  8. 不到 20 人的互联网公司该去吗?
  9. python字符串_Python的字符串和编码
  10. CT图像预处理之窗宽窗位调整
  11. gradient设置上下渐变_CSS3 经典教程系列:CSS3 线性渐变(linear-gradient)
  12. kubernetes Downward API
  13. [高项]消极风险VS积极风险
  14. 数学模型转化为计算机语言,程序设计语言类课程教学选题方法探讨
  15. 正则表达式以及正则表达式在字符串的替换、切割、获取中的应用
  16. UGUI源码分析:开关组件Toggle与ToggleGroup
  17. 简化 Spring 控制器:只须写接口即可
  18. LabVIEW以编程方式启用IEPE激励
  19. 朝雨的方向,梦回故里
  20. Amazon Australia 可通过EDI实现哪些业务单据对接?

热门文章

  1. keras网易日月光华笔记
  2. 3d云html原理,云渲染是什么原理?
  3. 《牛津字典精华总结》- 初阶系列 - 字母 - A
  4. 目标管理:SMART原则
  5. 我们为什么要做智慧社区,智慧社区主要服务在哪些行业
  6. 多易教育KAFKA实战(2)-java生产者客户端API示例代码
  7. NIST建议的零信任安全8大应用场景
  8. storm笔记:storm集群
  9. 开发利器之Mac下的MacPorts
  10. 20种梦幻摄影调色luts预设