公司接口有加密,然后想用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相关的内容
然后剩下的就是调试了,这个是自己亲测可用,然后刚学,有什么不足的地方请指出,开贴做记录用,