I am binascii.Error: Incorrect padding when using b32hexdecode in the last for loop in my decrypt function.
Here is my code:
from cryptography.fernet import Fernet
import base64 as b64,random as rd
def encryt(data):
key=Fernet.generate_key()
data=bytes(data,"utf-8")
key2=rd.randint(0,5)
for i in range(key2):
data=b64.a85encode(data)
data=b64.b32hexencode(data)
fernet=Fernet(key)
encrypted=fernet.encrypt(data)
for i in range(key2):
encrypted=b64.b32hexencode(encrypted)
encrypted=b64.a85encode(encrypted)
for i in range(key2):
key=b64.b64encode(key)
key=b64.a85encode(key)
key=b64.b32hexencode(key)
final=b64.b85encode(bytes(str(key2),"utf-8")).decode()+"/?\"+encrypted.decode()+"~`~"+key.decode()
return(final)
def decrypt(data):
a=data.split("/?\")
key2=int(b64.b85decode(bytes(a[0],"utf-8")))
b=a[1].split("~`~")
encrypted=bytes(b[0],"utf-8")
key=bytes(b[1],"utf-8")
for i in range(key2):
key=b64.b32hexdecode(key)
key=b64.a85decode(key)
key=b64.b64decode(key)
for i in range(key2):
encrypted=b64.a85decode(encrypted)
try:encrypted=b64.b32hexdecode(encrypted)
except Exception as e:encrypted=b64.b32hexdecode(encrypted+b'==')
fernet=Fernet(key)
decrypted=fernet.decrypt(encrypted)
for i in range(key2):
decrypted=b64.a85decode(decrypted)
try:decrypted=b64.b32hexdecode(decrypted)
except Exception as e:decrypted=b64.b32hexdecode(decrypted+b'=' * (4-len(decrypted) % 4))
return(decrypted.decode())
a=encryt("testest:!2345t789&^543yehwqd7")
print(a,"n",decrypt(a))
I tried using decrypted+b'=='
and b'=' * (4-len(decrypted) % 4)
, but I was still getting the error.
Furthermore, sometimes when I run it, I get a binascii.Error: Non-base32 digit found error, and sometimes it just works.
New contributor
Tee Cheng Jun is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.