python encode()
No, using encode()
to hexlify isn't nice.
The way you use the hex
codec worked in Python 2 because you can call encode()
on 8-bit strings in Python 2, ie you can encode something that is already encoded. That doesn't make sense. encode()
is for encoding Unicode strings into 8-bit strings, not for encoding 8-bit strings as 8-bit strings.
In Python 3 you can't call encode()
on 8-bit strings anymore, so the hex
codec became pointless and was removed.
Although you theoretically could have a hex
codec and use it like this:
>>> import codecs>>> hexlify = codecs.getencoder('hex')>>> hexlify(b'Blaah')[0]b'426c616168'
Using binascii is easier and nicer:
>>> import binascii>>> binascii.hexlify(b'Blaah')b'426c616168'
this is the same answer for the above but i modified it so it works with python 3.
import binasciifrom Crypto.Cipher import AESfrom Crypto import Randomdef encrypt(passwrd, message): msglist = [] key = bytes(passwrd, "utf-8") iv = Random.new().read(AES.block_size) cipher = AES.new(key, AES.MODE_CFB, iv) msg = iv + cipher.encrypt(bytes(message, "utf-8")) msg = binascii.hexlify(msg) for letter in str(msg): msglist.append(letter) msglist.remove("b") msglist.remove("'") msglist.remove("'") for letter in msglist: print(letter, end="") print("")def decrypt(passwrd, message): msglist = [] key = bytes(passwrd, "utf-8") iv = Random.new().read(AES.block_size) cipher = AES.new(key, AES.MODE_CFB, iv) msg = cipher.decrypt(binascii.unhexlify(bytes(message, "utf-8")))[len(iv):] for letter in str(msg): msglist.append(letter) msglist.remove("b") msglist.remove("'") msglist.remove("'") for letter in msglist: print(letter, end="") print("")