Шифруем файлы с помощью 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
Фреймворк для экспериментов и исследований?
Запутанный декларативный стиль или код, похожий на "нотации", головная боль от отладок... А если ваша модель неожиданно выходит за рамки парадигмы работы фреймворка — приходится прикладывать титанические усилия по переработке кода или разворачиванию парочки здоровенных костылей. И да, мы про TensorFlow.
Все из-за самого статического графа вычислений во фреймворке... Граф вычисление — это абстрактное представление алгоритма вычислений в виде, не поверите, математического графа. Где ребра — потоки данных, а узлы — операции. Узлами могут быть слоями нейронки, а ребра — потоками данных. В статическом варианте можно оптимизировать и ускорить работу вашего TPU или GPU, провести объединение или распараллеливание операций.
Удобно, конечно...
Только доступа у вас к обработке данных нет. Поэтому любые ошибки = час сеанса, пока TF не обнаружит проблемы. А крупные модели ML иногда требуют и больше времени... Это серьезный минус всех фреймворков, построенных на работе статического графа вычислений.
А теперь представьте, что фреймворк перестраивает граф перед каждым запуском. Теперь никаких проблем с отладкой, а также практически бесконечная гибкость и расширяемость.
Вот тут и мы и говорим о PyTorch. Интуитивный и похожий на Питон синтаксис, неплохая интеграция с другими библиотеками и доступ к быстрой отладке – все это про него. И это мы не упоминаем кучу модульных элементов, которые легко комбинировать, упрощенное написание собственных типов слоев. Pytorch – про эксперименты, быстрое обучение и небольшие проекты.
Приятное дополнение — широкий выбор предварительно обученных моделей.
Но если вам все же нужна оптимизация ваших вычислений... тогда стоит обратиться к конкуренту от Google.
Поиграем в бизнесменов?
Одна вакансия, два кандидата. Сможете выбрать лучшего? И так пять раз.
Полезные фишки «1С:Управление торговлей 8»
«1С:Управление торговлей 8» – универсальная программа, которой пользуются как крупные оптовые предприятия, так и небольшие розничными магазинами. В программе есть много полезных фишек, о которых вы могли не знать.
1. «1C:УТ» обменивается данными с интернет-магазином.
После настроек обмена данными заказы, сделанные на сайте, будут оперативно отражены в программе. В обратную сторону тоже работает: например, сайт может собирать информацию об остатках на складе и сразу уведомлять покупателя о наличии товара нужного цвета и размера.
2. «1С:УТ» печатает группу документов.
Если нужно напечатать сразу несколько документов, можно использовать механизм групповой печати.
3. «1С:УТ» интегрируется с «1С:Бухгалтерия» для упрощения бухгалтерского учета
Интеграция будет настроена автоматически, если обе конфигурации – типовые, без доработок и с актуальными обновлениями.
4. «1С:УТ» работает вместе с почтой.
Любой документ из программы «1С:Управление торговлей» можно отправить по почте одним кликом и импортировать электронные письма в программу.
5. К «1С:УТ» подключаются онлайн-кассы и другие устройства.
Это упрощает подключение торгового оборудования: сканеры для штрих-кодов, электронные весы, устройства для печати этикеток, терминалы, кассовые аппараты и прочее. После подключения устройств можно вести учет на небольшом складе.
6. Раздельный доступ между сотрудниками в «1С:УТ».
В «1С:УТ» есть шаблоны для каждой должности, в которых прописаны права доступа к функциям программы и определенным документам. Можно использовать готовые, а можно настроить ограничения и разрешения под работу своих сотрудников.
7. Планирование задач и управление заказами в «1С:УТ».
Задачи можно устанавливать на определенную дату, время и сразу же прикреплять к задаче описание и нужные документы.
8. Оперативная замена цены «1С:УТ».
В программе можно быстро выставлять и корректировать цены на отдельные товары или категории. Сможете отслеживать динамику изменения цен и видеть, кто из сотрудников вносил изменения.