加密逻辑 解密逻辑 可以查看 上一篇 的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加密逻辑相关推荐

  1. python aes加密 cbc_【转载】python AES CBC模式加密

    今天需要用到AES CBC模式加密,搜索了很久,终于加密成功,记录一下今天的理解. 首先要安装pycrypto库,不知道为什么在windows安装失败,在linux可以正常安装 这里有几点要注意,ke ...

  2. AES CBC模式下的CBC bit flipping Attack

    <?xml version="1.0" encoding="utf-8"?> AES CBC模式下的CBC bit flipping Attack ...

  3. golang实现AES ECB模式的加密和解密

    最近有一个需求需要在golang中实现AES ECB模式的加密和解密,  看了一下官方文档和相关资料发现golang 官方包并没有完善的实现,于是自己尝试写了一个,本文中的AES算法是基于ECB模式, ...

  4. javascript ←AES.CBC→ go 相互加密解密

    文章目录 加密 go javascript 解密 go javascript 发现没有完整的 js 和 go 的CBC模式相互加密解密,记录一下 代码来自网络,进行一次整理 加密 go func Ae ...

  5. Python base64 + AES EBC模式加密

    """ 先进行Base64加密,再进行AES ecb模式加密:EBC 模式需要补全 """ ''' ECB模式补足16位 ''' def a ...

  6. android tsclib.so,续 某哩某哩APP之m3u8解密分析之跳过so文件 从APP日志入手(AES/CBC模式)...

    前排提示!!!!! 论坛禁止留联系方式!! 禁止求成品,也没有成品! 写在前面的话 前段时间已经研究过这个平台网页和APP的AES加解密方式了. 最近发现这个平台的APP的加解密方式更新了,所以又继续 ...

  7. go、JS AES(CBC模式)加密解密兼容

    js 代码: <!DOCTYPE html>   <html lang="en">   <head>       <meta charse ...

  8. python版本的策略模式

    策略提供一种用多个行为中的一个行为来配置一个类的方法.其实就是应用于同一个问题的不同解决方案 # -*- coding:UTF-8 -*- import abcclass Strategy(metac ...

  9. AES加密解密(CBC模式)

    高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES, ...

  10. python aes padding_python笔记43-加解密AES/CBC/pkcs7padding

    前言 有些公司对接口的安全要求比较高,传参数的时候,不会明文的传输,先对接口加密,返回的数据也加密返回. 目前比较常见的加密方式是AES/CBC/pkcs7padding. AES五种加密模式 在AE ...

最新文章

  1. layui table 弹出层刷新_layui 关闭open弹出框 刷新table表格页面的方法
  2. django 快速实现完整登录系统(cookie)
  3. 【MM模块】Subcontracting 委外加工(外包)—1
  4. 【瞎扯】 About Me
  5. [NOI 2017]整数
  6. Java-时间复杂度和空间复杂度
  7. 【APP】取代top工具的Linux运维利器--htop
  8. Docker版本Omnibus Gitlab 加Lets Encrypt免费SSL一键搭建
  9. linux通过yum安装vim,linux/centos系统如何使用yum安装vi/vim?(转)
  10. 中国唯一入选 Forrester 领导者象限,阿里云 Serverless 产品能力全球第一
  11. Timus 1787. Turn for MEGA 题解
  12. ServerGuide U盘安装Windows Server 2008 R2安装
  13. TextCNN模型原理
  14. 企业微信应用发送消息
  15. 广州搬砖第三年,从一枚小菜鸡到架构师
  16. 你是阳光,你的世界充满阳光---心在哪,成就就在哪
  17. MFC+opencv实现摄像头的打开与关闭
  18. 【历史】 apache catalina servlet tomcat 命名的由来
  19. 实现xxxxxxx系统六大质量属性战术
  20. <<多模态预训练—泛读>>2022:BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Unders

热门文章

  1. 伪原创视频软件 视频MD5怎么更改
  2. 数字图像处理-第一章
  3. 如何用python爬取图片数据_python爬虫怎么实现爬取网站图片?
  4. credit author statement
  5. 手机进程设置多少个最好_手机打开,开发者选项中的这4个设置,性能瞬间提升一倍,不卡顿...
  6. Java基础:Java的优点和缺点
  7. python进程已结束,退出代码 -1073740791 (0xC0000409)解决办法
  8. 硬币找钱问题(最小硬币和问题)详解与代码实现
  9. java 计算父亲节_java实现计算周期性提醒的示例
  10. 计算机专业论文指导教师评语,指导老师论文评语