Должны ли алгоритмы шифрования, такие как DES, применяться к битам или байтам? - PullRequest
0 голосов
/ 18 июня 2011

В Интернете я нашел несколько примеров кода, которые шифруют байты с использованием CipherInputStream или чего-то еще ... Что если у меня есть файл, содержащий 1000 бит, как я могу применить к нему DES? Я делаю это в Java

Ответы [ 2 ]

1 голос
/ 19 июня 2011

Это вполне разумный вопрос, несмотря на отрицательные голоса.

Многие режимы шифрования (например, CBC) требуют, чтобы входное значение было кратно размеру блока базового шифра (.eg 16 байтов).для AES или 8 байт для DES).Для достижения этого используется схема заполнения.Возможность шифрования открытого текста с произвольной длиной в битах зависит от используемой схемы заполнения.

Наиболее часто используемая схема заполнения (т. Е. Заполнение PKCS # 5) добавляет в открытый текст n байтов значения n.Это, очевидно, требует, чтобы открытый текст был в байтах.Но есть менее известные схемы заполнения, которые допускают произвольные входные данные.Например, так называемое «заполнение битами» добавляет один 1-бит к вашему тексту и добавляет столько битов, сколько необходимо, до тех пор, пока длина вашего ввода не станет кратной размеру блока вашего шифра.Например, стандарт ISO / IEC 9797-1 предлагает это.

При принятии решения о том, хотите ли вы поддерживать произвольные длины битов в вашем приложении, вы также должны учитывать криптографические библиотеки, которые вы хотите использовать.Хотя некоторые криптоалгоритмы были стандартизированы, чтобы разрешить ввод произвольных размеров в битах, они могут быть не реализованы вашей крипто библиотекой.Например, хеш-функция SHA-1 хорошо определена для входных данных, таких как 4-битная строка '0101', но у вас могут возникнуть проблемы с поиском библиотеки, которая может фактически вычислить этот хеш.

1 голос
/ 18 июня 2011

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

Что если у меня есть файл, содержащий 1000 бит, как я могу применить к нему DES?

Использовать байты.Методы Cipher.doUpdate и Cipher.doFinal используют байты, а не их массив.Используйте подходящую схему заполнения для учета любых незаполненных данных.

...