公司产品的密码需要用AES加密并base64后传给服务器,代码是java写的,但我需要用python来写接口测试,网上找了攻略并与java代码结果对照,实现如下:
问题1:base64的时候,若选择urlsafe_b64encode方式,会与java在部分字符上不一致,比如+变-,/变_。所以改成encode string方式。
# -*- coding: utf-8 -*-
from Crypto.Cipher import AES
import base64
"""
aes加密算法
padding : PKCS5
注:python 2.7
"""
#加密
def encryt(str, key):
BS = AES.block_size
pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS)
cipher = AES.new(key, AES.MODE_ECB,str)
msg = cipher.encrypt(pad(str))
msg = base64.encodestring(msg)
return msg
#解密
def decrypt(enStr, key):
unpad = lambda s: s[0:-ord(s[-1])]
cipher = AES.new(key, AES.MODE_ECB)
decryptByts = base64.decodestring(enStr)
msg = cipher.decrypt(decryptByts)
msg=unpad(msg)
return msg