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
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.