【问题标题】:Correctly migrate from Python 2 md5 library to Python 3 hashlib正确从 Python 2 md5 库迁移到 Python 3 hashlib
【发布时间】:2017-07-09 00:57:09
【问题描述】:

我正在尝试在 Django 1.11、Python 3.5.2 中集成第 3 方支付网关 (CCAvenue)

第 3 方提供的参考代码使用已弃用的库 md5 对文本进行加密。

from Crypto.Cipher import AES
import md5

def pad(data):
    length = 16 - (len(data) % 16)
    data += chr(length)*length
    return data

def encrypt(plainText,workingKey):
    iv = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f'
    plainText = pad(plainText)
    encDigest = md5.new ()
    encDigest.update(workingKey)
    enc_cipher = AES.new(encDigest.digest(), AES.MODE_CBC, iv)
    encryptedText = enc_cipher.encrypt(plainText).encode('hex')
    return encryptedText

如何使用 Python 3 的 hashlib 库使上述 encrypt() 方法与 Python 3 兼容?你能把整个方法贴出来吗?

【问题讨论】:

  • 你的意思是 Python 2 到 3?

标签: python django python-3.x ccavenue


【解决方案1】:

警告:不要再使用 crypto 或 pycrypto! read more

这是一种与 Python 3 兼容的方法:

from binascii import hexlify, unhexlify
from Crypto.Cipher import AES
from hashlib import md5

from django.utils.encoding import force_bytes

iv = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f'
# for python 3.9 & pycryptodome, this need to be byte
iv = b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f'

BS = 16


def _pad(data):
    return data + (BS - len(data) % BS) * chr(BS - len(data) % BS)


def _unpad(data):
    return data[0:-ord(data[-1])]


def encrypt(plain_text, working_key):
    plain_text = _pad(plain_text)
    enc_cipher = AES.new(md5(force_bytes(working_key)).digest(), AES.MODE_CBC, _iv)
    return hexlify(enc_cipher.encrypt(plain_text)).decode('utf-8')


def decrypt(cipher_text, working_key):
    encrypted_text = unhexlify(cipher_text)
    dec_cipher = AES.new(md5(force_bytes(working_key)).digest(), AES.MODE_CBC, _iv)
    return _unpad(dec_cipher.decrypt(encrypted_text).decode('utf-8'))

【讨论】:

  • 完美运行@ashwini。 CCAvenue 应该使用这些方法更新他们的参考代码。
猜你喜欢
  • 2019-05-15
  • 2019-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多