Использование байтовых массивов и шестнадцатеричных значений в криптографии - PullRequest
0 голосов
/ 21 марта 2012

Когда мы используем криптографию, мы всегда видим, что вместо значений String используются байтовые массивы.Но когда мы смотрим на методы большинства криптографических алгоритмов, они используют шестнадцатеричные значения для выполнения любых операций.Например.AES: MixColumns, SubBytes все эти методы (я полагаю, что он использует) использует шестнадцатеричные значения для выполнения этих операций.
Можете ли вы объяснить, как эти байтовые массивы используются в этих операциях в виде шестнадцатеричных значений.

У меня есть задание по разработке алгоритма шифрования, поэтому любые соответствующие примеры кодов будут очень уместны.

Ответы [ 4 ]

1 голос
/ 22 марта 2012

Самая важная вещь, которую нужно понять о шестнадцатеричном, это то, что это система для представления числовых значений, как двоичные или десятичные. Это не более чем обозначение. Как вы, возможно, знаете, многие компьютерные языки позволяют указывать числовые литералы несколькими различными способами:

int a = 42;
int a = 0x2A;

Они хранят одно и то же значение в переменной 'a', и компилятор должен сгенерировать для них идентичный код. Разница между этими двумя строками будет потеряна очень рано в процессе компиляции, потому что компилятор заботится о указанном вами значении , а не о представлении , которое вы использовали для его кодирования в вашем исходном файле.

Основной вывод: понятия «шестнадцатеричные значения» не существует - существуют только шестнадцатеричные представления значений.

При всем этом вы также говорите о строковых значениях. Очевидно, 42! = "42"! = "2A"! = 0x2A. Если у вас есть строка, вам нужно проанализировать ее в числовом значении, прежде чем делать какие-либо вычисления с ней.

1 голос
/ 21 марта 2012

Каждые четыре цифры двоичного числа составляют шестнадцатеричную цифру, поэтому вы можете легко конвертировать туда и обратно (см .: http://en.wikipedia.org/wiki/Hexadecimal#Binary_conversion).

Не думаю, что я полностью понимаю, о чем вы спрашиваете.

0 голосов
/ 23 апреля 2012

Криптография в целом, за исключением хеш-функций, представляет собой метод преобразования данных из одного формата в другой, в основном называемый зашифрованным текстом, с использованием секретного ключа. Секретный ключ может быть применен к зашифрованному тексту, чтобы получить исходные данные, также называемые простым текстом. В этом процессе данные обрабатываются на уровне байтов, хотя это может быть и уровень битов. Точка здесь текст или строки, на которые мы ссылаемся, находятся в ограниченном диапазоне байта. Пример ASCII определен в определенном диапазоне в байтовом значении от 0 до 255. На практике, когда выполняется криптографическая операция, символ преобразуется в эквивалентный байт, и с помощью ключа выполняется процесс. Теперь итоговый байт или байты, скорее всего, будут выходить за пределы читаемого человеком определенного текста, такого как кодированный ASCII и т. Д. По этой причине любые данные, к которым требуется применить криптографическую функцию, сначала преобразуются в байтовый массив. Например, текст, который нужно зашифровать: «Привет, как дела?» , Следующие шаги должны быть выполнены: 1. byte [] data = "Привет, как дела?". GetBytes () 2. Обработайте шифр данных, используя ключ, который также является байтом [] 3. Выходной BLOB-объект называется cipherTextBytes [] 4. Шифрование завершено 5. Используя Key [], процесс выполняется через cipherTextBytes [], который возвращает байты данных 6 Простая новая строка (data []) вернет строковое значение Hellow, как у вас дела.

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

0 голосов
/ 22 марта 2012

Байты, байтовые массивы и / или области памяти обычно отображаются в среде IDE (интегрированная среда разработки) и отладчике в виде шестнадцатеричных чисел. Это потому, что это наиболее эффективное и четкое представление байта. Для опытного программиста довольно легко превратить их в биты (по его мнению). Например, вы можете ясно видеть, как работает XOR и shift. Эти (и дополнение) являются наиболее распространенными операциями при симметричном шифровании / хешировании.

Так что маловероятно, что программа выполняет такой тип преобразования, вероятно, это среда , в которой вы находитесь. Это и исходный код (который преобразуется в байты во время компиляции) вероятно, использует также много литералов в шестнадцатеричной записи.

...