Кратко представляет XOR: XOR-это биографическая операция, представленная символом XOR или ^. Его алгоритм состоит в том, чтобы использовать одно и то же значение до 0 и 1 для каждого двоичного бита числа с обеих сторон оператора.
Простое понимание - добавить без переноса, например, 1+1 = 0, 0+0 = 0, 1+0 = 1.
Описание требования
Данные шифрования в информационном возрасте - очень важная тема. В процессе выполнения проекта я также внедрил относительно сложный алгоритм шифрования. Однако, поскольку задействованная технология является конфиденциальной, я реализовал здесь относительно простую версию, используя входные и выходные потоки файла и операции XOR для шифрования произвольных файлов. Что касается алгоритма расшифровки, он очень прост и может быть решен, думая об этом сами.
Принципы математики
Этот алгоритм шифрования использует функцию двух чисел XOR. Давайте кратко поговорим о принципе XOR. XOR на самом деле является операцией бинарного кодирования файла. Проще говоря, когда два двоичных бита одинаковы, это 0, а не 1 одновременно. См. Следующий пример:
// двоичное представление 7: 00000111 // двоичное представление 2: 00000010 // Результат, полученный по XOR обоих: 00000101 // Результат, полученный по номеру 5//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Реализация кода
Импорт java.io.*; class filesecret {public static void main (string [] args) выбрасывает исключение {// Найти файл, который должен быть зашифрован, указать букву диска самостоятельно, а ввод и вывод не должны быть в одном и том же файл буквы диска infile = новый файл. Письмо: // Дешифрованный файл "); // Создать канал данных, чтобы дать двоичные данные изображения проходить в fileInputStream input = new FileInputStream (INFILE); FileOutput Output = new FileOutputStream (Outfile); // В процессе чтения данные чтения данных - это число. Это число должно генерироваться каким -то алгоритмом шифрования. Здесь я просто составляю число 928 (мой день рождения), затем выполняю эксклюзивную или вывожу полученные данные int content = 0; // Эта переменная используется для хранения данных чтения. Конечно, здесь можно использовать более длинные типы данных, такие как Long. Конечно, мы также можем использовать другие типы данных. Просто удовлетворяйте типам данных на обоих концах ^, которые могут быть преобразованы друг в друга, по крайней мере, их можно отбрасывать, в то время как ((content = input.read ())! =-1) // Если конец файла не достигнут, затем продолжайте читать данные, и данные чтения хранятся в переменной контента. -1 -это окончательный символ файла {output.write (content^928); // записать в выходной поток файла} // Закрыть ресурс input.close (); output.close ();}}Оценка функции кода
Для этого кода функция может в основном удовлетворить потребности, но есть недостатки. Во -первых, алгоритм шифрования не используется для генерации другого конца номера XOR, а во -вторых, я не реализовал дешифрование файла. На самом деле, дешифрование очень проста. Пожалуйста, внимательно прочитайте математическую принцип, и вы можете знать, как написать алгоритм расшифровки. Фактически, шифрование и дешифрование не реализуются одновременно в том же месте, но шифрование рассчитывается с использованием того же алгоритма шифрования.
Улучшенный алгоритм с использованием случайных чисел
В приведенном выше процессе мы фактически используем заданное значение для выполнения XOR с бинарным файлом, который мы читаем. Так можем ли мы использовать случайное число для замены этого соглашения? Ответ да. Прежде всего, мы используем переменные типа Int для их хранения. Диапазон, который может быть представлен: плюс или минус 2,1 млрд. Число. Конкретный код заключается в следующем:
// Методы генерации случайных чисел Импорт java.util.*; Public Class randomTest {public static void main (string [] args) {random random = new random (); int num = random.nextint (11); // Укажите, что генерируется случайное число между 0-10. Мы должны быть в состоянии сохранить сгенерированное случайное число для шифрования и расшифровки для использования System.out.println («Случайное число IS:»+num); }}Улучшенный алгоритм шифрования
Код шифрования:
import java.io.*;import java.util.*;class FileSecret{public static void main(String[] args) throws Exception {//Find the file to be encrypted, specify the drive letter yourself, and the input and output do not need to be in the same drive letter File inFile = new File("Driver://encrypted file");//Output the file to be encrypted to the specified drive letter File outFile = новый файл («Driver: // Decrypted File»); // Создать канал данных, чтобы дать двоичные данные изображения в течение FileInputStream input = new FileInputStream (Infile); FileOutputStream output = new FileOutputStream (Outfile); // другое число, которое генерирует зашифрованное xor random = random random () number number. генерируется. Мы должны быть в состоянии сохранить сгенерированное случайное число для шифрования и расшифровщиков для использования System.out.println («Случайное число IS:»+num); // В процессе чтения данные чтения будут XOR, что должно генерироваться каким -то алгоритом шифрования. Здесь я просто составляю число 928 (мой день рождения), а затем выполняю XOR и вывожу полученные данные int content = 0; // Эта переменная используется для хранения данных чтения. Конечно, здесь можно использовать более длинные типы данных, такие как Long. Конечно, мы также можем использовать другие типы данных. Нам нужно только удовлетворить типы данных на обоих концах ^, чтобы преобразовать друг друга, и, по крайней мере, преобразование типа листа может быть выполнено в то время как ((content = input.read ())! =-1) // Если он не достигнут конца файла, то продолжайте читать данные, и данные чтения были сохранены в переменной контента. -1 -конечный символ файла {output.write (content^num); // Записать в выходной поток файла} // Закройте ресурс input.close (); output.close ();}}Сторона шифрования должна информировать сторону расшифровки числа, сгенерированного в вышеуказанном коде, в противном случае дешифрование файла не может быть реализовано.
Код дешифрования:
Импорт java.io.*; class filesecret {public static void main (string [] args) выбрасывает исключение {// Найти файл, который должен быть зашифрован, указать букву диска самостоятельно, а ввод и вывод не должны быть в одном и том же файл буквы диска infile = новый файл. Письмо: // Дешифрованный файл "); // Создать канал данных, чтобы дать двоичные данные изображения проходить в fileInputStream input = new FileInputStream (INFILE); FileOutput Output = new FileOutputStream (Outfile); // В процессе чтения данные чтения данных - это число. Это число должно генерироваться каким -то алгоритмом шифрования. Здесь я просто составляю число 928 (мой день рождения), затем выполняю эксклюзивную или вывожу полученные данные int content = 0; // Эта переменная используется для хранения данных чтения. Конечно, здесь можно использовать более длинные типы данных, такие как Long. Конечно, мы также можем использовать другие типы данных. Просто удовлетворяйте типам данных на обоих концах ^, которые могут быть преобразованы друг в друга, по крайней мере, их можно отбрасывать, в то время как ((content = input.read ())! =-1) // Если конец файла не достигнут, затем продолжайте читать данные, и данные чтения хранятся в переменной контента. -1 -конечный символ файла {output.write (Content^ зашифрованное число, передаваемое с конца шифрования); // Записать в выходной поток файла} // Закрыть ресурс input.close (); output.close ();}}Снова улучшился
Фактически, в нашем коде стандартный код шифрования должен быть сгенерирован случайным образом и содержит различные символы, такие как буквы и числа. Итак, как мы генерируем такую строку шифрования? Как преобразовать такую строку шифрования в двоичный код после его генерации? Предоставьте идею: использование регулярных выражений Java может генерировать любую строку, которую вы хотите, а затем использовать метод преобразования строки для генерации соответствующего двоичного кода. Я сам реализовал чрезвычайно сложный метод генерации шифрования, но его нельзя раскрыть. Это включает в себя информацию об лабораторных проектах, и существует множество областей криптографии и много классических алгоритмов шифрования, которые также можно использовать.
Суммировать
Выше приведено все содержание этой статьи о подробном объяснении принципа шифрования и использовании любого файла в операции Java Xor. Я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на этот сайт:
Java использует операцию XOR для реализации простых шифрования и кода экземпляра алгоритма расшифровки
Java Программирование пример реализации Exor или операции на шестнадцатеричных строках
Анализ кода проблемы XOR в Java
Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!