Why AES is not decrypting my encrypted text?

365 Views Asked by At

does ecb mode have bugs? why my program not working even I did everything... I am stuck please help.

Text I encrypted : hello world

My attempt :

from Crypto.Cipher import AES
import base64

key = '0123456789abcdef'
#this is the password that we are going to use to encrypt and decrpyt the text 

def encrypt(text):
    global key
    cipher = AES.new(key, AES.MODE_ECB)
    
    if len(text) %16!=0:
        while not len(text)%16==0:
            text=text+" "
    
    encrypted_text =cipher.encrypt(text)
    return encrypted_text.strip()


def decrypt(text):
    global key
    decipher = AES.new(key, AES.MODE_ECB)
    
    if len(text)%16!=0:
        while len(text)%16!=0:
            text=str(text)+" "
    
    return decipher.decrypt(text).strip()
   
text=input("Enter encrypted text here : ")
#b'XhXAv\xd2\xac\xa3\xc2WY*\x9d\x8a\x02'

print(decrypt(text))

Input :

b'XhXAv\xd2\xac\xa3\xc2WY*\x9d\x8a\x02'

output :

b"yR\xca\xb1\xf6\xcal<I\x93A1`\x1e\x17R\xbb\xc8(0\x94\x19'\xb3QT\xeb\x9b\xfe\xc8\xce\xf4l9\x92\xe8@\x18\xf2\x85\xbe\x13\x00\x8d\xa8\x96M9"

Required Output :

hello world
1

There are 1 best solutions below

3
On BEST ANSWER

Do not pad cipher text in decryption. Note that you might need to remove padding after decryption and not before it.

from Crypto.Cipher import AES
from base64 import b64encode, b64decode

key = '0123456789abcdef'
#this is the password that we are going to use to encrypt and decrpyt the text 

def encrypt(text):
    global key
    cipher = AES.new(key, AES.MODE_ECB)
    if len(text) %16!=0:
        while not len(text)%16==0:
            text=text+" "
    encrypted_text =cipher.encrypt(text)
    return b64encode(encrypted_text).decode('UTF-8')

def decrypt(text):
    global key
    text = b64decode(text) # decode before decryption
    decipher = AES.new(key, AES.MODE_ECB)
    return decipher.decrypt(text).decode('UTF-8')

text = input("Please enter your text: ")
ciphertext = encrypt(text)
print(f'Ciphertext: {ciphertext}')
print(f'Decrypted ciphertet: {decrypt(ciphertext)}')

And here is the result:

Please enter your text: hello world
Ciphertext: WGhYQXbSrKPCV1kqnYoCDQ==
Decrypted ciphertet: hello world 

UPDATE: You can also encode ciphertext by calling b64encode in base64, in this case you need to decode before decryption by calling b64decode. It is recommended to use codings like base64 to make it easier for transferring ciphertext in network and Internet.