13

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

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

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


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

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

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

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

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

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


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

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

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

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

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

0
Автор поста оценил этот комментарий

Если ввести не правильное "число для расшифровки" - результат не сильно отличается от оригинала. Странно

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Например?

показать ответы
1
DELETED
Автор поста оценил этот комментарий
То что я описал звучит сложнее чем пишется. Погуглите, там на 10 минут написать функцию (с учетом времени на отладку)
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Готово) https://www.online-python.com/7oyD2Gj65b


Единственное нужно оптимизировать код слишком много строк😃

показать ответы
0
Автор поста оценил этот комментарий

Если я введу число 12346578415241578412465789465123156487854131548784132231654874651231245784541547878

как долго проработает эта программа?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Меньше секунды

показать ответы
1
DELETED
Автор поста оценил этот комментарий
Вполне неплохо, но почему бы не добавить выбор файла цифрами (находим в корневой папке все тхт файлы и нумеруем их предложив выбрать пользователю)
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

отличная идея!) но это проект выходного дня, просто пробовал возможности функции преобразования текста в байт код)))

показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества