Как написать программу шифрования файлов

Идея давно витала в воздухе, реализацию я написал давно, а разместить статью всё было «не досуг». Исправляемся.

Сегодня я покажу, как на C# написать несложную, но весьма интересную программу для шифрования файлов двумя интересными методами (разработанными в недрах моей головы) — кодировкой HEX (в первой части) и кодировкой DEAD5EC (во второй части)

В основе каждого из методов — факторизация чисел, самый оптимальный метод, ибо «факторизация предположительно является

Ссылка скрыта от гостей
задачей. В настоящее время неизвестно, существует ли
Ссылка скрыта от гостей
Ссылка скрыта от гостей

факторизации целых чисел.»

HEX-метод прост и быстр, вполне может использоваться в незаконных целях (и используется в популярных нынче вирусов-шифровальщиков-вымогателей), но я вас предупреждаю, что есть УК РФ.
DEAD5EC-метод более упёртый и ресурсоемкий, максимальный размер файла 40Гб. При обработке этим методом размер temp-файла увеличивается в 100 раз (т.е. 40*100=4000Гб), т.к. что аккуратнее.

Программа для шифрования файлов на C#

Методов будет использоваться много, поэтому сначала подключим все пространства имен:

upload_2017-3-21_14-4-3.png

Мы пишем программу-шифратор, но где же Using System.Cryptography? Нету. Он нам не понадобится, ибо мы реализуем свои собственные функции.

В приложении есть собственно две части: оконный интерфейс и собственно код. Начнем с первого, быстренько накидаем интерфейс. Описывать как тащить кнопочки и пр. не буду — это легко.
Главное сделать 4 кнопки, пару полей и два окошка вывода информации для красоты.

Something like this:

upload_2017-3-21_14-6-43.png

Теперь код.
Для начала объявим переменную pathFile за пределами MainWindow(). Она нам нужна для сохранения пути к файлу.

upload_2017-3-21_14-7-21.png

На кнопку «Открыть» вешаем классический обработчик для выбора файла:

upload_2017-3-21_14-9-13.png

Тут для наглядности есть функция DisplayFile. Что она делает? Она разбивает файл на байты и даёт нам на них посмотреть. Практической пользы эта функция не несет.

Читайте также:
Программа для того чтобы не выскакивала реклама

upload_2017-3-21_14-10-32.png

Тут всё просто, читаем файл и перегоняем его порциями в байты и выводим на экран в отдельном окошке.

Далее, начнем с реализации функций HEX. На кнопку «Кодировать HEX» вешаем обработчик с вызовом функции Copy. Она у нас будет основная.

upload_2017-3-21_14-13-17.png

Как Зашифровать и Расшифровать Текст на C++ (Криптография)

Теперь собственно разберем функцию Copy. Именно ей предстоит кодировать файл быстро и красиво.

upload_2017-3-21_14-14-32.png

Обращаем внимание на входной параметр bool — именно он определяет, что будет: кодировка или декодировка.
Создаем просторный буфер, создаем классическую обертку FileStream.Read==>FileStream.Write
Первая у нас открывает исходный файл, вторая будет сохранять результат в новый файл.
Готовим массив байтов на bufferSize. Для кодирования HEX используется 18-символьный ключ.
Допускаются только цифры, для чего пишем проверку:

upload_2017-3-21_14-17-13.png

Собственно проверяем длину и то, что вводятся именно цифры. Это сделано как пример, остальные могут сделать свою реализацию.

Ну а теперь немного магии:

upload_2017-3-21_14-19-38.png

Что мы тут такого натворили? Мы прочитали по-байтово файл, перекодировали ASCII-код в integer
используя конструкцию bytes.Select.ToArray, с помощью bool CoderMode задали режим кодирования.

А потом с каждый int из массива bytesAsInts произвели математическое преобразование используя пару констант и натуральный логарифм. Умножение на «минус единицу» сделано, чтобы результат всегда был положительный.

Возьмем к примеру байт 0x78, который к примеру соответствует букве А.
Мы с ним немного повозились, и 0x78 теперь 0x31 и это уже не буква А . Таким образом мы произвели кодирование, которое в итоге изменяет значение байта, но это не влияет на размер итогового файла.
Если таким способом закодировать pdf или docx — разницы в размере не будет, но программы скажут, что файл возможно поврежден. На самом деле с ним всё ОК, и с помощью декодировки, используя тот же самый 18-символьный ключ, можно восстановить файл обратно со 100% гарантией.

Читайте также:
Программа форма на документы

Функция, реализующая обратный процесс:

upload_2017-3-21_14-26-14.png

Все так же, только математически наоборот. На вход этой функции нужно подать зашифрованный HEX-методом файл. (выберите не шифрованный, получите кракозябры).
Обработчик вешается так же:

upload_2017-3-21_14-28-11.png

На этом метод HEX-завершен. Теперь посмотрим, как это работает. Выбираем любой файл, для начала что-нибудь небольшое, вводим ключ и нажимаем «Кодировка HEX». Диалоговых окон пока не предусмотрено, просто смотрим, появился ли файл с расширением .shirase

upload_2017-3-21_14-38-29.png

Обратите внимание — оба файла, и оригинал, и закодированный имеют одинаковый размер.
1 207 870 байт — оригинал
1 207 870 байт — shirase-файл

Теперь проверяем структуру, используя инструмент WinMerge:

upload_2017-3-21_14-40-53.png

Думаю, принцип теперь понятен.

Теперь переименуем оригинальный файл, чтобы его не затереть. Попробуем расшифровать файл shirase. Выбираем его и нажимаем «Декодировать HEX». Рядом окажется оригинальный:

upload_2017-3-21_14-56-50.png

Попробуем его открыть.

upload_2017-3-21_14-57-15.png

Как видим — всё ОК.

Таким вот простым способом, используя похожие методы, вполне могут действовать всяческие вирусы-шифровальщики. Вообще ничего не мешает переделать этот код под полностью автономного бота, который будет шифровать всё подряд, указав ему папку, с которой нужно начать.

Как это сделать — я показывать по понятным соображениям тут не буду.

На этом первая часть завершена. Исходник и проект для HEX-метода ниже во вложении.

Метод DEAD5EC более объемный и сложнее — его реализацию пока не прилагаю.
[doublepost=1495692650,1490068995][/doublepost]Исходники чуть позже выложу на GitHub
[doublepost=1496292860][/doublepost]Ссылка на GitHub: GitHub — ishikawakaoru/CryptoNote: Another way to crypting documents based on Factoring Numbers and written on C#

Источник: codeby.net

Шифрование и дешифрование файлов в Java

В этом руководстве мы рассмотрим, как зашифровать и расшифровать файл с помощью существующих API JDK.

2. Написание теста первым

Начнем с написания нашего теста в стиле TDD. Поскольку здесь мы собираемся работать с файлами, кажется, уместно провести интеграционный тест.

Читайте также:
Как работает программа где мой ребенок

Поскольку мы просто используем существующие функции JDK, никаких внешних зависимостей не требуется.

Во-первых,we’ll encrypt the content using a newly generated secret key (в этом примере мы используем AES,Advanced Encryption Standard в качестве алгоритма симметричного шифрования).

Также обратите внимание, что мы определяем полную строку преобразования в конструкторе (AES/CBC/PKCS5Padding), которая является объединением используемого шифрования, режима блочного шифрования и заполнения (algorithm/mode/padding). Реализации JDK по умолчанию поддерживают ряд различных преобразований, но обратите внимание, что не каждую комбинацию можно считать криптографически безопасной по сегодняшним стандартам.

Предположим, чтоour FileEncrypterDecrypter class will write the output to a file called baz.enc. После этогоwe decrypt this file using the same secret key и убедитесь, что расшифрованный контент равен исходному:

3. шифрование

Шифрование и дешифрование файлов с помощью Python

Шифрование — это процесс кодирования информации, позволяющий только авторизованным сторонам получить к ней доступ.

33 239 просмотров

Хотим поделиться с вами, как можно шифровать файлы, используя Python с помощью библиотеки cryptography, построенной на основе алгоритма AES. Возможно кому-то, также как и нам, такой способ покажется более простым для шифрования файла с данными.

В данном примере используется симметричное шифрование. Тот же ключ, который применяется для шифрования данных, можно использовать для их дешифрования.

Итак, установим библиотеку cryptography:

pip install cryptography

Открываем новый файл Python:

from cryptography.fernet import Fernet

Создаем ключ и сохраняем его в файл, например, crypto.key:

def write_key(): # Создаем ключ и сохраняем его в файл key = Fernet.generate_key() with open(‘crypto.key’, ‘wb’) as key_file: key_file.write(key)

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru