Шифруем файлы с помощью 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.

Шифруем файлы с помощью Python Python, Программирование, Удаленная работа, IT, Программист, Программа, Длиннопост

После запуска скрипта выбираю пункт зашифровать файл и ввожу пароль 123

Шифруем файлы с помощью Python Python, Программирование, Удаленная работа, IT, Программист, Программа, Длиннопост

Все зашифрованный файл записан, смотрим файл)

Шифруем файлы с помощью Python Python, Программирование, Удаленная работа, IT, Программист, Программа, Длиннопост

Ничего не разобрать вот и отлично) теперь займемся расшифровкой.

Для расшифровки проведем обратные действия.

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, Программирование, Удаленная работа, IT, Программист, Программа, Длиннопост

И получаем расшифрованный файл

Шифруем файлы с помощью Python Python, Программирование, Удаленная работа, IT, Программист, Программа, Длиннопост
Шифруем файлы с помощью Python Python, Программирование, Удаленная работа, IT, Программист, Программа, Длиннопост

Фото кода на python

Ссылка на копирование - тык

Канал с инфой по Python - https://t.me/python_scrypt

Программирование на python

636 постов11.8K подписчик

Добавить пост

Правила сообщества

Публиковать могут пользователи с любым рейтингом. Однако!


Приветствуется:

• уважение к читателям и авторам

• конструктивность комментариев

• простота и информативность повествования

• тег python2 или python3, если актуально

• код публиковать в виде цитаты, либо ссылкой на специализированный сайт


Не рекомендуется:

• допускать оскорбления и провокации

• распространять вредоносное ПО

• просить решить вашу полноценную задачу за вас

• нарушать правила Пикабу