python的aes的ecb加密_AES ECB PKCS5/PKCS7 加密 python实现 支持中文
ecb模式介绍
电码本模式(electronic codebook book (ecb)
这种模式是将整个明文分成若干段相同的小段,然后对每一小段进行加密。
pkcs5padding和pkcs7padding的区别
pkcs5padding和pkcs7padding都是用来填充数据的一种模式。在ecb中,数据是分块加密的。如果需要加密的数据的字节码的长度不是块大小的整数倍就需要填充。
使用pkcs5,填充时:
要填充7个字节,那么填入的值就是0×7;
如果只填充1个字节,那么填入的值就是0×1;
恰好8个字节时还要补8个字节的0×08
正是这种即使恰好是8个字节也需要再补充字节的规定,可以让解密的数据很确定无误的移除多余的字节。
pkcs7和pkcs5的区别是数据块的大小;
pkcs5填充块的大小为8bytes(64字节)
pkcs7填充块的大小可以在1-255bytes之间。
因为aes并没有64位的块, 如果采用pkcs5, 那么实质上就是采用pkcs7
python实现
安装所需要的包
pip install pycryptodome
python代码
# -*- coding:utf-8 -*-
import base64
from crypto.cipher import aes
class encryptdate:
def __init__(self, key):
self.key = key # 初始化密钥
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])]
pad / unpad
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
def encrypt(self, encrdata): # 加密函数
res = self.aes.encrypt(self.pad(encrdata).encode("utf8"))
msg = str(base64.b64encode(res), encoding="utf8")
return msg
def decrypt(self, decrdata): # 解密函数
res = base64.decodebytes(decrdata.encode("utf8"))
msg = self.aes.decrypt(res).decode("utf8")
return self.unpad(msg)
eg = encryptdate("iiiioooojjjjpppp") # 这里密钥的长度必须是16的倍数
res = eg.encrypt("中文测试!")
print(res)
print(eg.decrypt(res))
运行效果
可点击在线加解密,验证一下
注意事项
选择安装pycryptodemo而不是pycrypto(安装pycrypto在python的某些版本会报错)
加密中文需要加密的是字节码而不是字符串(encode一下)
pad函数中计算长度的时候计算的也是转换成字节码后的长度而不是字符串的长度
注意linux下的换行符是\n,windows下的换行符是\r\n(跨平台传输加密后的文件,在写入时需要注意)
如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!
python的aes的ecb加密_AES ECB PKCS5/PKCS7 加密 python实现 支持中文相关推荐
- 基于python的AES,DES随机密钥生成及批量加密
#!/usr/bin/env python # -*- coding=utf-8 -*- """ AES加密解密工具类 数据块128位 key 为16位 iv 为16位, ...
- Python:AES+Base64的加密与解密(ECB模式)
本篇记录使用 AES(ECB模式)+Base64 如何进行加密与解密 函数名称 函数使用注意事项 pkcs7padding() 该方法主要用于对需要加密的明文处理 因为明文 text 也必须为16字节 ...
- Python实现AES中ECB模式pkcs5padding填充加密/解密(需要加密文档中可以有中文)
Python实现AES中ECB模式pkcs5padding填充加密/解密(需要加密文档中可以有中文) 一.本文主要解决的问题 二.完整版代码 结果: 三.遇到的问题 1.填充格式错误 2.传入类型错误 ...
- C#的AES加密解密(ECB)
测试网站:在线AES加密解密.AES在线加密解密.AES encryption and decryption 输出类型不同,则选择不同的获得byte数组方式 //base64 Byte[] e ...
- python实现AES对文件加解密(这里使用ECB密码本模式)
文章目录 1.加密 2.解密 pip install pycryptodome 请注意加解密成功的前提条件 加解密密匙key值相同 加解密密匙长度相同 加解密补长度的逻辑相同 加解密的模式相同 1.加 ...
- PYTHON实现AES加密,中英文通用!!!
一.前言 AES是一种对称加密,所谓对称加密就是加密与解密使用的秘钥是一个.在日常的开发中,无论是实现前后端的接口数据加密,还是数据传输安全性,都使用了AES加密,本文章将从python的角度去实现A ...
- aes 加密_AES加密的安全问题
aes加密简介 AES算法全称Advanced Encryption Standard,是DES算法的替代者,旨在取代DES成为广泛使用的标准,于2001年11月26日发布于FIPS PUB 197, ...
- span class=red[置顶]/span分组对称加密模式:ECB/CBC/CFB/OFB缺CTR- -
一般的加密通常都是块加密,如果要加密超过块大小的数据,就需要涉及填充和链加密模式,文中提到的ECB和CBC等就是指链加密模式.在C#组件中实现的很多算法和Java都不太兼容,至少我发现RSA和AES/ ...
- 信息安全工程师笔记-加密模式ECB、CBC、CFB、OFB、CTR
简述 DES和AES都属于分组密码,它们只能加密固定长度的明文.如果需要加密任意长度的明文,就需要对分组密码进行迭代,而 分组密码的迭代方法就称为分组密码"模式". 分组密码有很多 ...
最新文章
- sweetalert使用随笔
- JAVA中byte为负数处理
- SAP Kyma能像SAP BYD那样做field extension吗
- 如何彻底删除SVN中的文件和文件夹(附恢复方法)
- SQLSERVER字符串截取------STUFF
- linux ubuntu软件中心,安装Lubuntu 软件中心
- 8月29日见!卢伟冰:Redmi首款互联网电视将采用70英寸巨屏
- Master公式求递归复杂度
- mysql 性能调优 参数随写
- 什么是IOC(控制反转)、DI(依赖注入)举个形象的例子通俗易懂
- 基于.net技术的 Rss 订阅开发
- 计算机操作系统笔记——线程及其实现
- Java根据位置获取经纬度计算距离
- STC8H8K64U单片机学习-2-后续所需软件介绍
- python写的串口助手_Python实现的简单的单片机串口助手程序
- 计算机 64虚拟内存设置方法,计算机虚拟内存怎样设置
- C语言实现lagrange theorem拉格朗日定理的算法(附完整源码)
- putty linux上安装及使用
- 明略科技吴明辉:每一次新数据都会带来商业模式的迭代 | 会员专栏
- win10家庭版计算机登录名,怎样让Win10专业版/企业版/家庭版的登录界面显示用户名输入框...
热门文章
- 在实验室服务器毫无阻拦的安装pip3
- 模态对话框与非模态对话框的区别
- 字符大小端aix linux,Go交叉编译的那些事
- python主要简介_Python的简介
- 简述sd卡2.0协议_【正点原子FPGA连载】第十二章SD卡读写TXT文本实验-领航者 ZYNQ 之嵌入式开发指南...
- c语言用p1口进行转弯灯实验,P1.0口转弯灯程序 单片机IO口的应用
- imx6 android6.0.1,mfgtool刷写i.MX6 android6.0版本失败
- 因为某种原因阻止文本引擎初始化_网络营销外包——网络营销外包专员如何做好网站锚文本优化?...
- linux java api_Java常用API、Math类介绍
- mysql5.1 主主同步_mysql主主同步指定库的指定表(version 5.1~5.7)