Шифруем файлы с помощью Python
Всем привет) от нечего делать решил написать простейшую прогу на языке python для шифрования текстовых файлов. Программа работает без каких либо подключаемых модулей, и не претендует на какое либо серьезное шифрование)
Представим ситуацию что у нас имеется ПК на котором кроме интерпретатора Python ничего нет) и есть текстовый файл который желательно скрыть от посторонних глаз)
В этой ситуации можно применить шифр Цезаря, но это будет слишком просто так что постараемся придумать другой способ
Начнем)
Сначала создаем меню с выбором из двух пунктов: Зашифровать и расшифровать файл.
menu = int(input("1 - зашифровать\n2 - расшифровать\nВыберите цифру и нажмите Enter: ")) # делаем меню для пользователя
Далее разберем первый пункт а именно шифрование файла.
По умолчанию будем шифровать файл который под названием "file1.txt"(сюда можно вписать название вашего файла)
Открываем файл который нужно зашифровать с помощью with open (отступы обозначены > > )
Далее создаем переменную txt и записываем туда информацию из файла
menu = int(input("1 - зашифровать\n2 - расшифровать\nВыберите цифру и нажмите Enter: ")) # делаем меню для пользователя
if menu == 1:
> > with open("file1.txt", "rb") as file: # открываем файл который будем зашифровывать
> > > > txt = file.read() # читаем файл
Затем переводим в объект byte, кодировка cp1251, допишем в код
menu = int(input("1 - зашифровать\n2 - расшифровать\nВыберите цифру и нажмите Enter: ")) # делаем меню для пользователя
if menu == 1:
> > with open("file1.txt", "rb") as file: # открываем файл который будем зашифровывать
> > > > txt = file.read() # читаем файл
> > txt = txt.decode('cp1251') # далее переводим значение byte
> > bytes = txt.encode('cp1251')
> > decode = int.from_bytes(bytes, byteorder='big')
На последней строчке остановимся подробно.
Команда int.from_bytes() в Python принимает байты и конвертирует их в целое число. “bytes” - это последовательность байтов, которую нужно преобразовать, а “byteorder” определяет порядок байтов (в данном случае “big” - старший байт первый). Полученное целое число возвращается и может быть использовано в коде.
Теперь наша задача взять любое число которое будет паролем для обратной расшифровки и прибавить к полученному массиву байтов, попросим пользователя указать это число.
menu = int(input("1 - зашифровать\n2 - расшифровать\nВыберите цифру и нажмите Enter: ")) # делаем меню для пользователя
if menu == 1:
> > with open("file1.txt", "rb") as file: # открываем файл который будем зашифровывать
> > > > txt = file.read() # читаем файл
> > txt = txt.decode('cp1251') # далее переводим значение byte
> > bytes = txt.encode('cp1251')
> > decode = int.from_bytes(bytes, byteorder='big')
> > num = input("Введите любое число: ")
Складываем полученный массив байтов и число
menu = int(input("1 - зашифровать\n2 - расшифровать\nВыберите цифру и нажмите Enter: ")) # делаем меню для пользователя
if menu == 1:
> > with open("file1.txt", "rb") as file: # открываем файл который будем зашифровывать
> > > > txt = file.read() # читаем файл
> > txt = txt.decode('cp1251') # далее переводим значение byte
> > bytes = txt.encode('cp1251')
> > decode = int.from_bytes(bytes, byteorder='big')
> > num = input("Введите любое число: ")
> > output = int(decode) + int(num)
Далее перезаписываем измененный файл
menu = int(input("1 - зашифровать\n2 - расшифровать\nВыберите цифру и нажмите Enter: ")) # делаем меню для пользователя
if menu == 1:
> > with open("file1.txt", "rb") as file: # открываем файл который будем зашифровывать
> > > > txt = file.read() # читаем файл
> > txt = txt.decode('cp1251') # далее переводим значение byte
> > bytes = txt.encode('cp1251')
> > decode = int.from_bytes(bytes, byteorder='big')
> > num = input("Введите любое число: ")
> > output = int(decode) + int(num)
> > with open("file.txt", "w") as file:
> > > > file.write(str(output))
> > print("Зашифрованный файл записан")
Протестируем наш скрипт) для этого в папке со скриптом создам файл file1.txt c ключами bitcoin.
После запуска скрипта выбираю пункт зашифровать файл и ввожу пароль 123
Все зашифрованный файл записан, смотрим файл)
Ничего не разобрать вот и отлично) теперь займемся расшифровкой.
Для расшифровки проведем обратные действия.
elif menu == 2: # начинаем со второго пункта меню
> > with open("file1.txt", "rb") as file: # читаем файл и извлекаем число из него
> > > > txt = file.read()
> > txt = txt.decode('cp1251')
> > num = input("Введите число для расшифровки: ") # просим ввести число, с пмощью которого было зашифровано сообщение
> > txt = int(txt) - int(num) # находим исходный массив данных
> > byte_str = int(txt).to_bytes((int(txt).bit_length() + 7) // 8, byteorder="big") # переводим массив обратно в текст
Тут стоит пояснить последнее действие а именно зачем мы прибавляем 7 и целочисленно делим на 8. Мы прибавляем 7, чтобы учесть дополнительный бит, который мы получаем при преобразовании числа из двоичной системы счисления в десятичную. Этот дополнительный бит обычно равен 1, и он не может быть представлен точно в десятичной системе счисления. Мы делим на 8, потому что каждый бит в двоичном числе требует одного десятичного разряда для своего представления. Таким образом, мы получаем количество десятичных разрядов, которое нам нужно для представления двоичного числа в десятичной системе счисления.
elif menu == 2: # начинаем со второго пункта меню
> > with open("file1.txt", "rb") as file: # читаем файл и извлекаем число из него
> > > > txt = file.read()
> > txt = txt.decode('cp1251')
> > num = input("Введите число для расшифровки: ") # просим ввести число, с пмощью которого было зашифровано сообщение
> > txt = int(txt) - int(num) # находим исходный массив данных
> > byte_str = int(txt).to_bytes((int(txt).bit_length() + 7) // 8, byteorder="big") # переводим массив обратно в текст
> > with open("file1.txt", "w") as file: # записываем расшифрованный файл
> > > > file.write(str(b))
> > print("Расшифрованный файл записан")
И получаем расшифрованный файл
Фото кода на python
Ссылка на копирование - тык
Канал с инфой по Python - https://t.me/python_scrypt
Программирование на python
636 постов11.8K подписчик
Правила сообщества
Публиковать могут пользователи с любым рейтингом. Однако!
Приветствуется:
• уважение к читателям и авторам
• конструктивность комментариев
• простота и информативность повествования
• тег python2 или python3, если актуально
• код публиковать в виде цитаты, либо ссылкой на специализированный сайт
Не рекомендуется:
• допускать оскорбления и провокации
• распространять вредоносное ПО
• просить решить вашу полноценную задачу за вас
• нарушать правила Пикабу