CCAvenue支付网关集成pycryptodome 3.10.1出现str类型无法传入C代码错误
问题原因
PyCryptodome 底层调用C语言实现的加密逻辑,仅支持传入**字节类型(bytes)**参数,你的代码存在两处类型不匹配问题:
- 初始化的iv是字符串类型,未转为字节
- 待加密的plain_text是字符串类型,未转为字节
修正后的加密代码
import hashlib from Crypto.Cipher import AES from Crypto.Util.Padding import pad from binascii import hexlify def encrypt(plain_text, working_key): """ Method to encrypt cc-avenue hash. :param plain_text: plain text :param working_key: cc-avenue working key. :return: md5 hash """ # iv改为字节类型 iv = b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f' # 先把明文转成字节再补位 plain_text = pad(plain_text.encode('utf-8'), AES.block_size) byte_array_wk = working_key.encode('utf-8') key = hashlib.md5(byte_array_wk).digest() enc_cipher = AES.new(key, AES.MODE_CBC, iv) hexl = hexlify(enc_cipher.encrypt(plain_text)).decode('utf-8') return hexl
额外注意事项
- 如果后续需要做解密操作,解密后的字节结果要调用
.decode('utf-8')转回字符串 - 拼接merchant_data时,若参数值包含&、=等特殊字符,要先对参数值做转义处理,避免CCAvenue侧解析参数错误
内容的提问来源于stack exchange,提问作者Vishal Pandey
相关产品推荐
相关产品推荐

