Python实现AES中ECB模式pkcs5padding填充加密/解密(需要加密文档中可以有中文)

  • 一、本文主要解决的问题
  • 二、完整版代码
    • 结果:
  • 三、遇到的问题
    • 1.填充格式错误
    • 2.传入类型错误
  • 四、安装导入的第三方库
  • 参考文档

一、本文主要解决的问题

本文主要是讲解AES加密算法中的ECB模式的加密解密的Python3.7实现,以及遇到的问题。具体AES加密算法的原理这里不做过多介绍,想了解的更多关于AES加密可以参考文末的AES加密算法的详细介绍与实现。

二、完整版代码

废话不多说直接上代码

import base64
import jsonimport requests
from Crypto.Cipher import AESclass EncryptDate:def __init__(self, key):self.key = key.encode("utf-8")  # 初始化密钥self.length = AES.block_size  # 初始化数据块大小self.aes = AES.new(self.key, AES.MODE_ECB)  # 初始化AES,ECB模式的实例# 截断函数,去除填充的字符self.unpad = lambda date: date[0:-ord(date[-1])]def pad(self, text):"""#填充函数,使被加密数据的字节码长度是block_size的整数倍"""count = len(text.encode('utf-8'))add = self.length - (count % self.length)entext = text + (chr(add) * add)return entextdef encrypt(self, encrData):  # 加密函数res = self.aes.encrypt(self.pad(encrData).encode("utf8"))msg = str(base64.b64encode(res), encoding="utf8")return msgdef decrypt(self, decrData):  # 解密函数res = base64.decodebytes(decrData.encode("utf8"))msg = self.aes.decrypt(res).decode("utf8")return self.unpad(msg)eg = EncryptDate("xxxxaaaabbbbcccc")  # 这里密钥的长度必须是16的倍数
data = {"hotelCode": "330122892X", "realName": "张四五", "sex": "1"}
res = eg.encrypt(str(data))
print(res)
print(eg.decrypt(res))
结果:


三、遇到的问题

1.填充格式错误

报的错误:ValueError: Data must be aligned to block boundary in ECB mode
解决思路:填充函数,使被加密数据的字节码长度是block_size的整数倍
实现代码:

   def pad(self, text):"""#填充函数,使被加密数据的字节码长度是block_size的整数倍"""count = len(text.encode('utf-8'))add = self.length - (count % self.length)entext = text + (chr(add) * add)return entext

2.传入类型错误

TypeError: Object type <class 'str'> cannot be passed to C code
经过Debug发现,是因为传入参数的参数类型存在问题,需要更换为 bytearray , 也就是传入的key的类型错误:

import base64
import jsonimport requests
from Crypto.Cipher import AESclass EncryptDate:def __init__(self, key):# self.key = key  # 一开始传入的初始化密钥self.key = key.encode("utf-8")  # 更新之后传入的初始化密钥self.length = AES.block_size  # 初始化数据块大小self.aes = AES.new(self.key, AES.MODE_ECB)  # 初始化

四、安装导入的第三方库

由于 pycrypto‎ 已经停止维护很长时间,所以windows下切换成切换为pycrypto‎domo,Linux下还是不变 pycrypto‎domo

参考文档

AES加密算法的详细介绍与实现

Python实现AES中ECB模式pkcs5padding填充加密/解密(需要加密文档中可以有中文)相关推荐

  1. python调用库函数用ecb模式加密图片_AES中ECB模式的加密与解密(Python3.7)

    本文主要解决的问题 本文主要是讲解AES加密算法中的ECB模式的加密解密的Python3.7实现.具体AES加密算法的原理这里不做过多介绍,想了解的可以参考文末的参考链接. 主要解决了两个问题: 在P ...

  2. 实战篇-OpenSSL之AES加密算法-ECB模式

    本文属于<OpenSSL加密算法库使用系列教程>之一,欢迎查看其它文章. 实战篇-OpenSSL之AES加密算法-ECB模式 一.AES简介 二.ECB模式 1.命令行操作 2.函数说明 ...

  3. [crypto]-52-python3中rsa(签名验签加密解密)aes(ecb cbc ctr)hmac的使用,以及unittest测试用

    环境: 在ubuntu14.04下,记得安装:sudo pip3 install pycrypto 代码示例1: =========================== import base64 f ...

  4. python的aes的ecb加密_AES ECB PKCS5/PKCS7 加密 python实现 支持中文

    ecb模式介绍 电码本模式(electronic codebook book (ecb) 这种模式是将整个明文分成若干段相同的小段,然后对每一小段进行加密. pkcs5padding和pkcs7pad ...

  5. JAVA 3DES加密 ECB模式 ZeroPadding填充

    3DES ECB ZeroPadding 前言 解决 相关类 前言 因金融机构支付相关的接口需要对敏感数据加密,采用3DES加密.刚开始以为这个加密网上找一大堆,没想到一无所获. 解决 由于不熟悉这个 ...

  6. Go语言的DES加密(CBC模式, ECB模式) ---- 与java加密互通(转)

    问题场景: 业务需要对接接口, 采用DES加密方式加密, 于是google一下go的DES加密方式, go的DES的默认隐藏了ECB模式, 因为go认为ECB不安全, 所以不建议使用,就隐藏了, 然而 ...

  7. python合并word表格单元格_Python实战009:读取Word文档中的表格数据及表格合并问题解决...

    同事最近被安排整理资料,主要工作室将文档中的表格数据提取出来并整理层Excel表格供我们FII刀具商城进行资料维护.由于刀具的种类繁多且规格无数,所以要处理的数据量相当的庞大.人工核对整理既费时又费力 ...

  8. python word中表格字体设置_利用Python-docx 读写 Word 文档中的正文、表格、段落、字体样式等...

    前言: 前两篇博客介绍了 Python 的 docx 模块对 Word 文档的写操作,这篇博客将介绍如何用 docx 模块读取已有 Word 文档中的信息. 本篇博客主要内容有: 1.获取文档的章节信 ...

  9. linux在文档中查找内容,【Linux】用grep在文档中查找内容

    有时候,我们需要在文档中查找一些内容,常用grep.它在文档查找相关内容并输出匹配行. > 查找某关键字 在system.log中,查找包含keyword的行 grep 'keyword' sy ...

最新文章

  1. zabbix 安装时的报错mysql_connect(): Access denied for us
  2. 学习Python往哪个方向发展好
  3. linux备份svn仓库脚本,Centos详细搭建svn以及备份脚本
  4. Windows下将MySQL5.5升级为MySQL5.7
  5. 从旁观者到贡献者:经历 OpenYurt 的“开源之夏”,我们想让更多人体验社区的魅力
  6. 企业网站之html,httpd概述
  7. ubuntu下面的SecureCRT破解失败问题+本地ubuntu系统远程连接RHEL服务器的免密码登录问题(自己归纳总结)
  8. 容器编排技术 -- 使用 kubectl 创建Deployment
  9. java selenium环境安装
  10. Ubuntu18.04+Halcon18.11安装教程
  11. 估计理论(6):如何确定BLUE?
  12. 关于SOME/IP的理解
  13. Zabbix5 安装教程
  14. 使用php监控系统运行状态、网站运行状态监控系统
  15. 深度思考-不断逼近问题的本质
  16. [工业互联-6]:PLC工业控制系统快速概览
  17. labview中前面板如何设置背景图片
  18. AX4.0 SP2本地化的问题---汇兑损益报表打印
  19. JLINK的SWD接口调试器制作
  20. mysql 汉字一排序规则_MySQL 的字符集与排序规则

热门文章

  1. 怎么把dell 灵越2020一体机的win8系统改成win7?
  2. 安卓微信内置浏览器 input type=file 选择文件未响应
  3. 手机密码大全及国产贴牌与OEM型号对照表
  4. 快讯|ONES 通过 CMMI 3 级评估认证
  5. 模拟招聘大赛题目关于计算机,模拟招聘大赛活动策划书范文
  6. 企业级实战大数据课程(十)-尹成-专题视频课程
  7. 智能媒体管理产品文档转换/预览功能介绍(1)---Cloud Native架构
  8. 泛泰binx一键式离线刷机(可断网刷机,可刷任意版本)(官网脚本更新7.30)
  9. java科学计数法转正常的数字
  10. vivado 时序例外约束