Look, this is nothing new, I haven’t invented anything clever, but I couldn’t find an easy copy and paste solution to take a string (of any length), encrypt it with a password… and then decrypt it later on with Circuit Python.
I should start by saying, I’m not a python expert, I’m barely even a novice; I just dip in and out on projects. After a few attempts with ucryptolib
(and not really understanding how to use it in CircuitPython) I started looking into aesio
and came across this issue on github. It put me down the right path to build something myself that I could just import, generate a key, and encrypt a string… use it, and decrypt it later on. I called it CircuitPython-EasyCrypt
because… well, you get it.
Anyway, it’s just one file, it’s here. Just copy it beside your project and import it. Usage is pretty simple… it looks like this:
import EasyCrypt
keystring = "SixteenByteKey!!"
inpstring = "Some super secret string, that I don't want you to see."
# This is the initialisation vector/nonce. I generated it with the below code. As you
# will need it to decrypt later on, you might want to store it and not just generate it each time
# I just generated it like this and printed this one out to store it.
#
# import os
# from binascii import hexlify, unhexlify
# ivstring = hexlify(os.urandom(16)).decode()
ivstring = "aba0a3bde34a03487eda3ec96d5736a8"
crypted = EasyCrypt.encrypt_string(keystring, inpstring, ivstring)
print(crypted)
decrypted = EasyCrypt.decrypt_string(keystring, crypted, ivstring)
print(decrypted)
Ta da! It’s dumb, it’s just a wrapper on the real encryption stuff. But it works on my Feather M4, and makes my life easy and saves me bytearrying and hexlifying things all over the place. Hopefully if you stumble across it from googling it this will make your life easier.
If you want to reduce the code used you could update your own copy and put the key and/or the nonce in the file and just call encrypt_string(somestring)
and decrypt_string(someencryptedstring)
if you really wanted, you do you.
It would be cool if you use it to let me know.. I get lonely.