• XSS.stack #1 – первый литературный журнал от юзеров форума

Шифрование с флешки

TR1X

floppy-диск
Пользователь
Регистрация
16.10.2024
Сообщения
3
Реакции
0
Перезалив для XSS

1729249998918.jpeg


Интро

Надумал сделать удобную программу для шифрования файлов без паролей, с использованием ключа, чтобы он хранился на носителе, таким образом чтобы шифровать/дешифровать файлы/директории было удобно и просто, запустил экзешник, засунул флешку, и готово. Алгоритм симметричного шифрования работает достаточно быстро, да и к слову совсем изголяться и от кого то прятаться не является целью данной статьи. Но у меня есть доки и файлы, в которых я могу писать пароли к некоторым сервисам и тд. т.к. всего не упомнишь и хотелось бы чтобы эти данные были скрыты от чужих глаз, если что. Фотки видосы скрипты - все что угодно. Мне понравилась функциональность данного скрипта и я использую его в своих целях, именно поэтому решил написать тут, кто то может использовать его или допилить и сделать более круто и удобно т.к. сам код достаточно прост.

Готовим флешку

В принципе особо готовить ничего и не надо. Нужна безопасная флеха, которую мы не пихаем в первые попавшиеся тачки, а храним где то на ключах или типо того, для каких-нибудь особых случаев ) На usb-хе будет создана директория, в который будет лежать ключик. Далее нужно проделать одну манипуляцию, дело в том, что путь до ключа будет захардкожен в скрипте, ибо не вижу смысла каждый раз для шифра/дешифра прописывать лишние строки. Поэтому назначаю постоянную букву для флешки в управлении дисками. Делаю это под виндой, для линуха надо назначить постоянное имя для носителя, нашел вот такую инструкцию. Таким образом под линь надо поменять одну строку кода, в которой прописан путь до сертификата. Пихаем свою флешку, через управление дисками назначаем ей постоянную букву, например Х.

1729250053073.jpeg


Скрипт

В скрипте используется Fernet из модуля cryptography. Все достаточно тривиально, три команды на инпут шифровать/дешифровать/генерировать новый ключ.


Python:
import os
import sys
from cryptography.fernet import Fernet

# AES 128 CBC

# интро такое себе, предлагаю сделать лучше :D
intro = ['ИНТРО?']

def print_intro():
    for x in intro:
        print(x)

def write_key():
    key = Fernet.generate_key()
    with open('pantera.key', 'wb') as key_file:
        key_file.write(key)

def load_key():
    # путь до директории и ключа на USB
    return open(r'X:\pantera_key\pantera.key', 'rb').read()

def encrypt_file(filename):
    key = load_key()
    f = Fernet(key)
    with open(filename, 'rb') as file:
        file_data = file.read()
    encrypted_data = f.encrypt(file_data)
    print('file {} was encrypt'.format(filename))
    with open(filename, 'wb') as file:
        file.write(encrypted_data)

def encrypt_directory(crypt_dir):
    try:
        for file in os.listdir(crypt_dir):
            if os.path.isdir(crypt_dir + '\\' + file):
                encrypt_directory(crypt_dir + '\\' + file)
            if os.path.isfile(crypt_dir + '\\' + file):
                try:
                    encrypt_file(crypt_dir + '\\' + file)
                except:
                    pass
    except Exception as e:
        print(e)

def decrypt_file(filename):
    key = load_key()
    f = Fernet(key)
    with open(filename, 'rb') as file:
        encrypted_data = file.read()
    decrypted_data = f.decrypt(encrypted_data)
    print('file {} was decrypt'.format(filename))
    with open(filename, 'wb') as file:
        file.write(decrypted_data)

def decrypt_directory(decrypt_dir):
    try:
        for file in os.listdir(decrypt_dir):
            if os.path.isdir(decrypt_dir + '\\' + file):
                decrypt_directory(decrypt_dir + '\\' + file)
            if os.path.isfile(decrypt_dir + '\\' + file):
                try:
                    decrypt_file(decrypt_dir + '\\' + file)
                except:
                    pass
    except Exception as e:
        print(e)

def pantera():
    while True:
        try:
            cord = input('crypt/decrypt/genkey # ')
            if cord == 'crypt':
                crypt_dir = input('Crypt directory # ')
                try:
                    encrypt_directory(crypt_dir)
                except Exception as e:
                    print(e)
            elif cord == 'decrypt':
                decrypt_dir = input('Decrypt directory # ')
                try:
                    decrypt_directory(decrypt_dir)
                except Exception as e:
                    print(e)
            elif cord == 'genkey':
                write_key()
            else:
                print('')
                print('Wrong command ...')
        except KeyboardInterrupt:
            sys.exit()

if __name__ == '__main__':
    print_intro()
    pantera()


Работа


Компилим все этой в .exe pyinstaller'ом

Код:
pyinstaller --onefile script.py icon=your_picture.ico

И получаем резвый и достаточно удобный в использовании скрипт. Для использования: втыкаем флешку, запускаем .exe

1. Выполняем genkey()
2. Сохраняем полученный ключ на флешку X:\yourkey.key
3. Меняем путь в скрипте на ваш

def load_key():
# путь до директории и ключа на USB
return open(r'X:\yourkey.key', 'rb').read()

4. Запускаем и пользуемся, манипуляции выше достаточно провести один раз.
 
Последнее редактирование:
Идея хороша, но реализация через python, не самая лучшая. Большая потеря скорости шифрования/дешифрования файлов из-за особенностей самого языка. Хорошим вариантом для такого проекта, были бы языки семейства C, но альтернативы уже есть.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх