From d0a640442cd6dc7bbfdb2647cf1775c13ad79a96 Mon Sep 17 00:00:00 2001 From: Murtuza Zabuawala Date: Tue, 10 Apr 2018 16:50:43 +0100 Subject: [PATCH] Fix non-ASCII password decryption/encryption under Python 3 --- web/pgadmin/utils/crypto.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/web/pgadmin/utils/crypto.py b/web/pgadmin/utils/crypto.py index def3d6848..8350f7a1b 100644 --- a/web/pgadmin/utils/crypto.py +++ b/web/pgadmin/utils/crypto.py @@ -28,11 +28,11 @@ def encrypt(plaintext, key): """ iv = Random.new().read(AES.block_size) - key = pad(key).encode('utf-8') - cipher = AES.new(key, AES.MODE_CFB, iv) + cipher = AES.new(pad(key), AES.MODE_CFB, iv) # If user has entered non ascii password (Python2) # we have to encode it first - plaintext = plaintext.encode('utf-8') + if hasattr(str, 'decode'): + plaintext = plaintext.encode('utf-8') encrypted = base64.b64encode(iv + cipher.encrypt(plaintext)) return encrypted @@ -51,8 +51,7 @@ def decrypt(ciphertext, key): ciphertext = base64.b64decode(ciphertext) iv = ciphertext[:AES.block_size] - key = pad(key).encode('utf-8') - cipher = AES.new(key, AES.MODE_CFB, iv) + cipher = AES.new(pad(key), AES.MODE_CFB, iv) decrypted = cipher.decrypt(ciphertext[AES.block_size:]) return decrypted