Шифрование с помощью DES и пароля

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

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

// Prepare the parameter to the ciphers
AlgorithmParameterSpec paramSpec = new PBEParameterSpec( salt, iterationCount );

// Create the ciphers
ecipher.init(Cipher.ENCRYPT_MODE, key , paramSpec);
dcipher.init(Cipher.DECRYPT_MODE, key , paramSpec);

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

Как я могу узнать, что используется на другой стороне провода? Единственное, что я знаю от этого стороннего сервиса, это то, что используется алгоритм DES и, конечно же, секретный пароль.

Что мне не хватает?


person OscarRyz    schedule 03.12.2010    source источник
comment
FWIW, DES небезопасен, и его не следует использовать в ситуациях, когда вы ожидаете, что кто-то серьезно атакует ваши шифры. Если это самый безопасный способ связи с данной службой, что ж, будем надеяться, что вы не будете интересны кому-либо с большой вычислительной мощностью.   -  person David Thornley    schedule 04.12.2010
comment
@Дэйвид. Спасибо за комментарий. Да, мы в курсе этого. Это будет использоваться в локальной сети.   -  person OscarRyz    schedule 04.12.2010


Ответы (2)


Сам «DES» — всего лишь одна итерация. Его преемник, «Triple DES», шифрует каждый блок данных три раза, выполняет три итерации алгоритма. Если ожидается, что вы будете выполнять шифрование, используя только "DES", одна итерация должна быть правильной.

В общем, считается дурной практикой писать собственные криптографические функции для чего-либо, кроме игрушечных реализаций. Написание безопасных и правильных библиотек для криптографии иногда может быть сложной задачей. Рассмотрите возможность использования Архитектуры шифрования Java, часть платформы Java SE 6.

person Wesley    schedule 03.12.2010
comment
что с солью? Что касается функций, код, который я указал, использует JCA. - person OscarRyz; 04.12.2010
comment
Тройной DES технически не шифрует три раза. Он применяет алгоритм DES 3 раза для шифрования блока путем шифрования, дешифрования и повторного шифрования. - person Joel Cunningham; 04.12.2010
comment
@ Джоэл А как насчет соли? Что мы должны использовать? - person OscarRyz; 04.12.2010
comment
@Joel Поделом мне, что я написал об алгоритме, никогда не читая его сам. Спасибо! - person Wesley; 04.12.2010
comment
Соль должна быть предоставлена ​​вам, если она используется. Если соль не указана, вы можете попробовать не использовать соль (пустая строка). Если эта система предназначена для обеспечения безопасности, вам обязательно должна быть предоставлена ​​соль (или инструкции по ее созданию). - person Wesley; 04.12.2010

Ваша проблема в том, что вы знаете алгоритм шифрования (DES), но не знаете алгоритм генерации ключа. Для получения ключа из пароля есть много возможностей. PBEParameterSpec из вашего примера использует алгоритм PKCS#5 для получения ключа из пароля. Это очень хороший алгоритм для этой цели, но часто люди пытаются сами разработать простой алгоритм - например. просто хеширование пароля или какие-то еще худшие методы. Определить, какой метод используется, непросто. Если у вас есть работающее приложение, использующее этот сторонний сервис, вы можете попытаться перепроектировать его, чтобы увидеть, как оно работает.

person Robert    schedule 04.12.2010