python的aes的ecb加密_Python AES/ECB/PKCS5 加密

公司接口有加密,然后想用Python写一下加解密的类方面后面使用,百度找了许多都没有找到合适的,后面对比了一下Java的应该是填充的值有问题,然后百度了AES的padding应该怎么填充,PKCS5的填充就是块的大小默认是16,然后需要加密的明文长度除以这个,不足的补足到16的倍数,刚好是16的倍数也要补16位,然后补足的不是空格,而是差几位补充几位的Unicode值。

比如明文长度是15,填充的是\x01

这边可以用chr(x).encode('utf-8')方法来获取需要填充的值

然后直接贴代码,Python版本是3.5的

#/usr/bin/python

#encoding:utf-8

from Crypto.Cipher import AES

import base64

class AESECB:

block_size = 16

@staticmethod

def encrpyt(content,tk):

byte_content = content.encode('utf-8')

byte_key = tk.encode('utf-8')[0:16]

aes_new = AES.new(byte_key,AES.MODE_ECB)

if AESECB.block_size > len(byte_content):

padding = AESECB.block_size - len(byte_content)

byte_content = byte_content + chr(padding).encode('utf-8')*padding

elif AESECB.block_size < len(byte_content):

padding = AESECB.block_size - (len(byte_content)%AESECB.block_size)

byte_content = byte_content + chr(padding).encode('utf-8') * padding

else:

byte_content = byte_content + chr(16).encode('utf-8') * 16

result = aes_new.encrypt(byte_content)

base_result = base64.b64encode(result).decode('utf-8').replace('\n','').replace('\r','')

return base_result

@staticmethod

def decrpyt(encontent,tk):

key = tk[0:16]

des_new = AES.new(key,AES.MODE_ECB)

encontent += (len(encontent) % 4 )*'='

decrpytBytes = base64.b64decode(encontent)

meg = des_new.decrypt(decrpytBytes)

return meg.decode('utf-8').strip('')

有的同学引用from Crypto.Cipher import AES这个的时候可能会报错,可能会有两个问题,需要pip pycrypto这个package

然后安装了以后还报错的话,直接在Python的lib文件夹下,site_package这个文件夹

cypto文件夹首字母改成大写,安装的时候默认不知道为什么是小写的,所以导入的时候都识别不了

然后如果还有问题的话,看一下你电脑上安装的Visual Studio的版本,百度了一下之前2008的版本已经不能用了,请安装一下2015的版本,然后安装一下Python相关的内容

然后剩下的就是调试了,这个是自己亲测可用,然后刚学,有什么不足的地方请指出,开贴做记录用,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值