python版本AES CBC 模式ECA加密逻辑
加密逻辑 解密逻辑 可以查看 上一篇 的java版本
ebc安全加密逻辑 if方法去掉,中间key为默认测试参数
提供一个 easok的测试 代码
if __name__ == '__main__': print('1234567890123456','java encrypt:','b772a50be83a7c14fe882fc8548cd5d847b7f7a1bfcd0403244635ec3ed05406')pwd = "7985c4cc0cf22caccddb0b864f79e5dd";iv = "e3205234a872012af4f3ac5dbd9c810c";pwd = hexToByte(pwd)iv = hexToByte(iv)pc = prpcrypt(pwd, iv) import sys text=sys.argv[1]text='各位辛苦了'text='hell:各位辛苦了&*()123QWE'print("源串Hex:" , byteToHex(text.encode('utf-8'))) print("密码Hex:" + byteToHex(pwd));print("偏移Hex:" + byteToHex(iv));#开始加密e = pc.encrypt(text) #加密 d = pc.decrypt(e) #解密 print('encrypt e type:',type(d),',d type:',type(d))print ("加密串:",e ) print ("解密串:",d )
def byteToHex( _bytes ):#return ''.join( [ "%02x" % x for x in _bytes ] ).strip()return "".join(map(lambda b: format(b, "02x"), _bytes))def hexToByte( hexStr ):return bytes.fromhex(hexStr)class prpcrypt(): def __init__(self,key,iv): self.key = key self.iv = iv self.mode = AES.MODE_CBC self.BS = AES.block_size #补位 #self.pad = lambda s: s + (self.BS - len(s) % self.BS) * chr(self.BS - len(s) % self.BS) self.pad = lambda s: s + (self.BS - len(s.encode('utf-8')) % self.BS) * chr(self.BS - len(s.encode('utf-8')) % self.BS)self.unpad = lambda s : s[0:-ord(s[-1])] def encrypt(self,text): print ("pad text ...",len(text) ,'->',len(text.encode('utf-8')))text = self.pad(text) print ("pad text ok.",len(text),'->',byteToHex(text.encode('utf-8')))cryptor = AES.new(self.key,self.mode,self.iv) #目前AES-128 足够目前使用 ciphertext = cryptor.encrypt(text) print ("ciphertext type:",type(ciphertext),' :',ciphertext)#把加密后的字符串转化为16进制字符串 return byteToHex(ciphertext)#return b2a_hex(ciphertext) #return b2a_hex(ciphertext).decode("utf-8")#解密后,去掉补足的空格用strip() 去掉 def decrypt(self,text): cryptor = AES.new(self.key,self.mode, iv) plain_text = cryptor.decrypt(a2b_hex(text)) pad_plain_text = plain_text.decode('utf-8').rstrip('\0') return self.unpad(pad_plain_text)
其引用的 AES文件,开头需要引起注意的,是不同版本引用引用包的逻辑
print("os:", os.name);
if os.name == "nt":from Cryptodome.Cipher import AES
else:from Crypto.Cipher import AESdef byteToHex(_bytes):print 'byteToHex...'print type(_bytes)return ''.join( [ "%02x" % x for x in _bytes ] ).strip()#return "".join(map(lambda b: format(b, "02x"), _bytes))def hexToByte(hexStr):return bytes.fromhex(hexStr)def hexToByte(s):base='0123456789ABCDEF'i=0s = s.upper()s1=''while i < len(s):c1=s[i]c2=s[i+1]i+=2b1=base.find(c1)b2=base.find(c2)if b1 == -1 or b2 == -1:return Nones1+=chr((b1 << 4)+b2)return s1class Prpcrypt():def reset(self, key, iv):key = hexToByte(key)iv = hexToByte(iv)self.key = keyself.iv = ivdef __init__(self):_key = "51492ad8fe708880d7d4cebb808ee025"_iv = "61ec9e40971e944470f4a0d2fc3025f7"key = hexToByte(_key)iv = hexToByte(_iv)self.key = keyself.iv = ivself.mode = AES.MODE_CBCself.BS = AES.block_size# 补位# self.pad = lambda s: s + (self.BS - len(s) % self.BS) * chr(self.BS - len(s) % self.BS)self.pad = lambda s: s + (self.BS - len(s.encode('utf-8')) % self.BS) * chr(self.BS - len(s.encode('utf-8')) % self.BS)self.unpad = lambda s: s[0:-ord(s[-1])]# EAS加密# 入参 :stringOrbytes 要进行加密的字符串或二进制数组# 返回值:bytes AES加密字节数组def encrypt(self, text):if not type(str(''))==type(text):text=str(text)print"原始串:", type(text), texttext = self.pad(text)cryptor = AES.new(self.key, self.mode, self.iv)cipherbytes = cryptor.encrypt(text)return cipherbytes# EAS解密# 入参:encrypt_value 类型为bytes 或 16进制串# 返回值:bytesdef decrypt(self, encrypt_value):cryptor = AES.new(self.key, self.mode, self.iv)plain_bytes = cryptor.decrypt(encrypt_value)pad_plain_text = plain_bytes.decode('utf-8').rstrip('\0')plain_text=self.unpad(pad_plain_text)return plain_text# 先EAS加密再进行base64编码# 入参:string 要进行加密的字符串或二进制数组# 返回值:base64编码bytesdef encrypt_base64(self, string):print("Encrypt_base64 starting... :")temp = self.encrypt(string)e = base64.b64encode(temp)print"加密串:", type(e), e, "加密hex串:",b2a_hex(e)return e# base64解码再进行EAS解密def decrypt_base64(self, byte):print("Decrypt_base64 starting... :")temp = base64.b64decode(byte)return self.decrypt(temp)
python版本AES CBC 模式ECA加密逻辑相关推荐
- python aes加密 cbc_【转载】python AES CBC模式加密
今天需要用到AES CBC模式加密,搜索了很久,终于加密成功,记录一下今天的理解. 首先要安装pycrypto库,不知道为什么在windows安装失败,在linux可以正常安装 这里有几点要注意,ke ...
- AES CBC模式下的CBC bit flipping Attack
<?xml version="1.0" encoding="utf-8"?> AES CBC模式下的CBC bit flipping Attack ...
- golang实现AES ECB模式的加密和解密
最近有一个需求需要在golang中实现AES ECB模式的加密和解密, 看了一下官方文档和相关资料发现golang 官方包并没有完善的实现,于是自己尝试写了一个,本文中的AES算法是基于ECB模式, ...
- javascript ←AES.CBC→ go 相互加密解密
文章目录 加密 go javascript 解密 go javascript 发现没有完整的 js 和 go 的CBC模式相互加密解密,记录一下 代码来自网络,进行一次整理 加密 go func Ae ...
- Python base64 + AES EBC模式加密
""" 先进行Base64加密,再进行AES ecb模式加密:EBC 模式需要补全 """ ''' ECB模式补足16位 ''' def a ...
- android tsclib.so,续 某哩某哩APP之m3u8解密分析之跳过so文件 从APP日志入手(AES/CBC模式)...
前排提示!!!!! 论坛禁止留联系方式!! 禁止求成品,也没有成品! 写在前面的话 前段时间已经研究过这个平台网页和APP的AES加解密方式了. 最近发现这个平台的APP的加解密方式更新了,所以又继续 ...
- go、JS AES(CBC模式)加密解密兼容
js 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charse ...
- python版本的策略模式
策略提供一种用多个行为中的一个行为来配置一个类的方法.其实就是应用于同一个问题的不同解决方案 # -*- coding:UTF-8 -*- import abcclass Strategy(metac ...
- AES加密解密(CBC模式)
高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES, ...
- python aes padding_python笔记43-加解密AES/CBC/pkcs7padding
前言 有些公司对接口的安全要求比较高,传参数的时候,不会明文的传输,先对接口加密,返回的数据也加密返回. 目前比较常见的加密方式是AES/CBC/pkcs7padding. AES五种加密模式 在AE ...
最新文章
- layui table 弹出层刷新_layui 关闭open弹出框 刷新table表格页面的方法
- django 快速实现完整登录系统(cookie)
- 【MM模块】Subcontracting 委外加工(外包)—1
- 【瞎扯】 About Me
- [NOI 2017]整数
- Java-时间复杂度和空间复杂度
- 【APP】取代top工具的Linux运维利器--htop
- Docker版本Omnibus Gitlab 加Lets Encrypt免费SSL一键搭建
- linux通过yum安装vim,linux/centos系统如何使用yum安装vi/vim?(转)
- 中国唯一入选 Forrester 领导者象限,阿里云 Serverless 产品能力全球第一
- Timus 1787. Turn for MEGA 题解
- ServerGuide U盘安装Windows Server 2008 R2安装
- TextCNN模型原理
- 企业微信应用发送消息
- 广州搬砖第三年,从一枚小菜鸡到架构师
- 你是阳光,你的世界充满阳光---心在哪,成就就在哪
- MFC+opencv实现摄像头的打开与关闭
- 【历史】 apache catalina servlet tomcat 命名的由来
- 实现xxxxxxx系统六大质量属性战术
- <<多模态预训练—泛读>>2022:BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Unders
热门文章
- 伪原创视频软件 视频MD5怎么更改
- 数字图像处理-第一章
- 如何用python爬取图片数据_python爬虫怎么实现爬取网站图片?
- credit author statement
- 手机进程设置多少个最好_手机打开,开发者选项中的这4个设置,性能瞬间提升一倍,不卡顿...
- Java基础:Java的优点和缺点
- python进程已结束,退出代码 -1073740791 (0xC0000409)解决办法
- 硬币找钱问题(最小硬币和问题)详解与代码实现
- java 计算父亲节_java实现计算周期性提醒的示例
- 计算机专业论文指导教师评语,指导老师论文评语