2017-07-09 4 views
-1

Ich versuche, eine 3rd-Party-Payment-Gateway zu integrieren (CCAvenue) in Django 1.11, Python 3.5.2korrekt von Python 2 md5 Bibliothek Python 3 hashlib

Der Referenzcode zur Verfügung gestellt von der dritten Partei verwendet die Migration veraltete Bibliothek MD5 zum Verschlüsseln von Texten.

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 

Wie kann ich den oben encrypt() Methode Python 3 kompatibel zu machen mit der hashlib Bibliothek von Python 3? Kannst du die ganze Methode posten?

+0

Ihre mittleren Python 2 bis 3? –

Antwort

0

Hier ist eine Python 3 kompatibel Weise das gleiche zu tun:

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' 

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')) 
+0

Funktioniert perfekt @ashwini. CCAvenue sollte ihren Referenzcode mit diesen Methoden aktualisieren. –