本文主要是针对微信支付的退款结果通知的AES-256-ECB解密。
废话不多说,直接上代码:
import base64,hashlib
from Crypto.Cipher import AES
class AESCipher():
"""
Usage:
c = AESCipher('password').encrypt('message')
m = AESCipher('password').decrypt(c)
Tested under Python 3 and PyCrypto 2.6.1.
"""
def __init__(self, key):
self.key = hashlib.md5(key.encode('utf8')).hexdigest()
# Padding for the input string --not
# related to encryption itself.
self.BLOCK_SIZE = 32 # Bytes
self.pad = lambda s: s + (self.BLOCK_SIZE - len(s) % self.BLOCK_SIZE) * \
chr(self.BLOCK_SIZE - len(s) % self.BLOCK_SIZE)
self.unpad = lambda s: s[:-ord(s[len(s) - 1:])]
#加密
def encrypt(self, raw):
raw = self.pad(raw)
cipher = AES.new(self.key, AES.MODE_ECB)
return base64.b64encode(cipher.encrypt(raw))
#解密,针对微信用此方法即可
def decrypt(self, enc):
enc = base64.b64decode(enc)
cipher = AES.new(self.key, AES.MODE_ECB)
return self.unpad(cipher.decrypt(enc)).decode('utf8')
pwd = 'your key'
msg = "your return_xml's 'req_info'"
print(AESCipher(pwd).decrypt(msg))