![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Domestic Cat |
|
||||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
JCE (Java Cryptography Extentions) позволяет работать с энкрипшн, генерировать ключи, генерировать MAC. Он поддерживает симметричные, асимметричные блок- и стрим шифры.
Я начну с самого простого: энкрипшн - декрипшн. Существует множество алгоритмов шифрования. Поддерживаемые алгоритмы можно узнать из документации к пакету javax.crypto.spec, он включает в себя RC2, RC5, Blowfish, DES, Triple DESede, AES Rijndael. Для примера мы возьмем алгоритм Triple DESede, который был (не знаю, является ли сейчас) одобрен для использования в правительстве US. Он основан на стандарте DES (Digital Encryption Standard), 64-битном шифре, реально использующем 56 битов. Troiple DESede означает тройной DES (encryption-decryption-encryption), суть которого в том, что информация шифруется с одним ключом, дешифруестя с другим, и вновь шифруется с третьим. Также, как и DES, ломается брут-форсом. Мы начнем с генерации ключа и записи шифрованного сообщения в файл.
Файл keyfile будет содержать ключ. Следующая задача - сгенерировать этот самый ключ. Для этого нужно получить инстанс класса KeyGenerator для данного алгоритма:
Имея ключ, мы создаем объект Cipher для шифрования сообщения (ENCRYPT_MODE):
Теперь можно создать шифрованный стрим и обернуть его во что хотим, в данном случае - в ObjectOutputStream:
Чтобы прочесть шифрованный файл, необходимо выполнить обратные операции: считать ключ из файла, создать объект Cipher для дешифровки (DECRYPT_MODE) и прочитать объект:
Это сообщение отредактировал(а) AntonSaburov - 30.11.2004, 17:57 -------------------- |
||||||||||||
|
|||||||||||||
| jfx |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 18.10.2004 Репутация: нет Всего: 1 |
У меня вопрос по SecretKeyFactory. Я не могу понять что он делает....
Например в .NET для DES используется key - ключ и IV - вектор инициализации. А вот с java я что-то не пойму:
Где здесь key, где iv... Разъясните пожалуйста в чем смысл SecretKeyFactory. И если можно какиенибудь аналогии с привычными key и iv. Спасибо. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
IV можно получить - сipher.getIV().
secretkey.getEncoded() возвращает ключ в стандартном виде. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| jfx |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 18.10.2004 Репутация: нет Всего: 1 |
Спасибо. Это понятно.
Я просто хочу разобраться что такое SecretKeyFactory, что это такое, зачем оно нужно и почему нельзя использовать обычние key и iv. Ну и как соотносятся тот массив байт что в начале к обычным key и iv. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
DESKeySpec - это исходные данные для генерации ключа DES. SecretKey - это уже реальный ключ используемый для шифрования представленных в том формате который используется Cipher-ом. SecretKeyFactory предназначен для конвертирования ключей в обоих направлениях.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| jfx |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 18.10.2004 Репутация: нет Всего: 1 |
Стало не намного понятне
Спасибо. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Переводит во внутренний формат. В частности: DES ключ состоит из 64 бит, но реально для шифрования используются только 56, остальные 8 это контрольная сумма, а вектора инициализации и вовсе нет (что там MS в C# намутила, я не понимаю). Понимаешь этот интерфейс универсальный для самых разных алгоритмов шифрования и требования к ключу шифрования тоже могут быть разными. Далеко не факт, что любая сгенерированная пользователем последовательность байт, будет пригодна как ключ шифрования, поэтому у ввели этот интерфейст. Попробуй почитать Java Cryptography от O'Relly, в Компьютерной литературе была ссылка. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| jfx |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 18.10.2004 Репутация: нет Всего: 1 |
Спасибо. Почитаю.
Что из себя представляет ключ DES я в курсе Осталось только понять в чем разница реализаций DES от SUN и Microsoft. Это сообщение отредактировал(а) jfx - 10.2.2006, 09:54 |
|||
|
||||
| jfx |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 18.10.2004 Репутация: нет Всего: 1 |
Хм, если MS провайдеру сунут вектор инициализации 0, то первые 8 байт (т.е. один блок) шифруется точно также как и в Java. А вот дальше начинаютя отличия. Очевидно он как-то меняет свой iv...
Люди кто сталкивался с шифрованием в Java и в .NET? Помогите разобраться как их совместить? Чтобы зашифрованное одним расшифровывалось другим и наоборот. Спасибо. Добавлено @ 10:20 Разобрался
Это сообщение отредактировал(а) jfx - 10.2.2006, 10:23 |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |