在 Flask Web 应用程序中正确地从 Python 2 md5 库迁移到 Python 3 hashlib 以进行 CCAvenue 集成
Correctly migrate from Python 2 md5 library to Python 3 hashlib in Flask web application for CCAvenue integration
我正在尝试在 Flask 0.12.2、Python 3.6.1.
中集成第三方支付网关 (CCAvenue)
第 3 方提供的参考代码使用已弃用的库 md5 来加密文本。
我在中得到了迁移的解决方案。但是,我需要相同的 Flask 版本代码。
我找到了解决方案,这是代码
from Crypto.Cipher import AES
import hashlib
from binascii import hexlify, unhexlify
def pad(data):
length = 16 - (len(data) % 16)
data += chr(length)*length
return data
def unpad(data):
return data[0:-ord(data[-1])]
def encrypt(plainText, workingKey):
iv = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f'
plainText = pad(plainText)
bytearrayWorkingKey = bytearray()
bytearrayWorkingKey.extend(map(ord, workingKey))
enc_cipher = AES.new(hashlib.md5(bytearrayWorkingKey).digest(), AES.MODE_CBC, iv)
return hexlify(enc_cipher.encrypt(plainText)).decode('utf-8')
def decrypt(cipherText, workingKey):
iv = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f'
encryptedText = unhexlify(cipherText)
bytearrayWorkingKey = bytearray()
bytearrayWorkingKey.extend(map(ord, workingKey))
decCipher = AES.new(hashlib.md5(bytearrayWorkingKey).digest(), AES.MODE_CBC, iv)
return unpad(decCipher.decrypt(encryptedText).decode('utf-8'))
为@prash 的解决方案添加对我有用的更新。
iv was of type str
from Crypto.Cipher import AES
import hashlib
from binascii import hexlify, unhexlify
def pad(data):
length = 16 - (len(data) % 16)
data += chr(length)*length
return data
def unpad(data):
return data[0:-ord(data[-1])]
def encrypt(plainText, workingKey):
iv = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f'.encode("utf-8")
plainText = pad(plainText)
bytearrayWorkingKey = bytearray()
bytearrayWorkingKey.extend(map(ord, workingKey))
enc_cipher = AES.new(hashlib.md5(bytearrayWorkingKey).digest(), AES.MODE_CBC, iv)
return hexlify(enc_cipher.encrypt(plainText.encode("utf-8"))).decode('utf-8')
def decrypt(cipherText, workingKey):
iv = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f'
encryptedText = unhexlify(cipherText)
bytearrayWorkingKey = bytearray()
bytearrayWorkingKey.extend(map(ord, workingKey))
decCipher = AES.new(hashlib.md5(bytearrayWorkingKey).digest(), AES.MODE_CBC, iv)
return unpad(decCipher.decrypt(encryptedText).decode('utf-8'))
我正在尝试在 Flask 0.12.2、Python 3.6.1.
中集成第三方支付网关 (CCAvenue)第 3 方提供的参考代码使用已弃用的库 md5 来加密文本。
我在
我找到了解决方案,这是代码
from Crypto.Cipher import AES
import hashlib
from binascii import hexlify, unhexlify
def pad(data):
length = 16 - (len(data) % 16)
data += chr(length)*length
return data
def unpad(data):
return data[0:-ord(data[-1])]
def encrypt(plainText, workingKey):
iv = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f'
plainText = pad(plainText)
bytearrayWorkingKey = bytearray()
bytearrayWorkingKey.extend(map(ord, workingKey))
enc_cipher = AES.new(hashlib.md5(bytearrayWorkingKey).digest(), AES.MODE_CBC, iv)
return hexlify(enc_cipher.encrypt(plainText)).decode('utf-8')
def decrypt(cipherText, workingKey):
iv = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f'
encryptedText = unhexlify(cipherText)
bytearrayWorkingKey = bytearray()
bytearrayWorkingKey.extend(map(ord, workingKey))
decCipher = AES.new(hashlib.md5(bytearrayWorkingKey).digest(), AES.MODE_CBC, iv)
return unpad(decCipher.decrypt(encryptedText).decode('utf-8'))
为@prash 的解决方案添加对我有用的更新。
iv was of type str
from Crypto.Cipher import AES
import hashlib
from binascii import hexlify, unhexlify
def pad(data):
length = 16 - (len(data) % 16)
data += chr(length)*length
return data
def unpad(data):
return data[0:-ord(data[-1])]
def encrypt(plainText, workingKey):
iv = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f'.encode("utf-8")
plainText = pad(plainText)
bytearrayWorkingKey = bytearray()
bytearrayWorkingKey.extend(map(ord, workingKey))
enc_cipher = AES.new(hashlib.md5(bytearrayWorkingKey).digest(), AES.MODE_CBC, iv)
return hexlify(enc_cipher.encrypt(plainText.encode("utf-8"))).decode('utf-8')
def decrypt(cipherText, workingKey):
iv = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f'
encryptedText = unhexlify(cipherText)
bytearrayWorkingKey = bytearray()
bytearrayWorkingKey.extend(map(ord, workingKey))
decCipher = AES.new(hashlib.md5(bytearrayWorkingKey).digest(), AES.MODE_CBC, iv)
return unpad(decCipher.decrypt(encryptedText).decode('utf-8'))