Стандарт шифрования данных - PullRequest
0 голосов
/ 07 декабря 2010

Нас попросили написать Java-реализацию алгоритма DES (который используется для шифрования и дешифрования). У меня была пара вопросов:

  1. DES указывает, что должно быть 64 бита простого текста или зашифрованного текста и ровно 56-битный общий ключ. какой метод дает число байтов,

  2. Алгоритм использует множество манипуляций на битовом уровне, таких как разбиение 64 битов на две 32-битные секции. Как это можно сделать?

Ответы [ 3 ]

2 голосов
/ 07 декабря 2010

Хотя это не совсем ответ на ваш вопрос, я должен сказать:

Самостоятельная реализация алгоритмов шифрования в большинстве случаев является действительно плохой идеей.

Позвольте мне объяснить:

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

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

  3. И даже если вы действительно удачливы и усердны и добились идеальной реализации, это пустая трата времени и ресурсов, если вы не используете существующую реализацию, которая уже была разработана, протестирована и проверена.

И пару слов о DES, хотя я надеюсь, что вы знаете, что: Pure DES считается действительно слабым для сегодняшнего стандарта. Поэтому вы должны реализовать 3DES, что лучше.

Edit: Хорошо, после всего этого разговора и после осознания того, что это, похоже, домашнее задание (спасибо за внимание), я немного погрузился в DES. Вот что я получил до сих пор:

DES - блочный шифр, работающий на 64-битных блоках. Существует несколько различных режимов работы . Они определяют, как чистый текст должен быть разделен на 64-битные блоки. Для некоторых режимов требуется padding , это означает, что вы заполняете последний блок данными, которые вы можете удалить после расшифровки зашифрованного текста. Абзац Padding в статье Wikipedia выше содержит описание того, как padding использовался в DES.

Так много для теории, как это сделать на Java ...

byte[] bytesOfString = clearTextString.getBytes();

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

Надеюсь, этот пересмотренный ответ более полезен для вас.

1 голос
/ 07 декабря 2010

Не можете ли вы использовать уже существующую библиотеку bouncycastle: http://www.bouncycastle.org/docs/docs1.6/index.html?

Вы найдете много примеров использования этой библиотеки в книге Дэвида Хука "Начало криптографии с Java".

0 голосов
/ 14 декабря 2010
  1. Теперь вы должны знать, что 8 бит = 1 байт. Все в криптографии работает с битами, вам никогда не нужны байты, кроме как для определения буфера.

  2. Для разделения используются битовые операции . Замаскируйте верхние биты для нижней половины, сдвиньте верхние биты для верхней половины. Я предполагаю, что у вас уже есть ссылка, и, хотя они являются бесценным ресурсом, вам абсолютно необходимо знать, как работают побитовые операции. Хорошим ресурсом, который не испортит проект, является алгоритм сжатия, такой как CABAC, так как он также ориентирован на биты. Затем закройте вкладку и попробуйте использовать спецификацию, чтобы создать свою собственную.

...