Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание ключа по спецификации 
V
    Опции темы
DmTsarev
Дата 1.4.2008, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 11.7.2007

Репутация: нет
Всего: нет



Есть ключ, с помощью метода getEncoded() получаем набор байтов. 
Как из этих байтов восстановить ключ?

        
Код

       SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");

        byte raw[] = key.getEncoded();

        DESKeySpec ks = new DESKeySpec(raw);
        
        Key k = skf.generateSecret( ks );
     

        

Так получается, но не хочется использовать для каждого алгоритма свою спецификацию. 
Есть ли какая-нибудь KeyFactory , которая сама переваривает спецификации в ключ заданного типа?
PM MAIL   Вверх
Alexandr87
Дата 3.4.2008, 06:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: 9
Всего: 39



Код

        byte baKey[] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
        SecretKeySpec spec = new SecretKeySpec(baKey, "DES");
        SecretKey key = 
                SecretKeyFactory.getInstance("DES").generateSecret(spec)
;

PM Jabber   Вверх
DmTsarev
Дата 3.4.2008, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 11.7.2007

Репутация: нет
Всего: нет



InvalidKeySpecException в твоем примере.
 В этом-то и проблема, что SecretKeySpec и DESKeySpec  или DESedeKeySpec отличаются по структуре.

Это сообщение отредактировал(а) DmTsarev - 3.4.2008, 11:56
PM MAIL   Вверх
Alexandr87
Дата 3.4.2008, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: 9
Всего: 39



DmTsarev, в упор не вижу где вы находите проблемы

Код

        SecretKey key1 = KeyGenerator.getInstance("DES").generateKey();
        byte baKey1[] = key1.getEncoded();
        
        SecretKeySpec spec = new SecretKeySpec(baKey1, "DES");
        SecretKey key2 = SecretKeyFactory.getInstance("DES").generateSecret(spec);
        byte baKey2[] = key2.getEncoded();
        
        System.out.println("Key1: " + new String(Hex.encode(baKey1)));
        System.out.println("Key2: " + new String(Hex.encode(baKey2)));
        
        byte baMessage[] = "Message".getBytes();
        
        Cipher ciph = Cipher.getInstance("DES/ECB/PKCS5Padding");
        ciph.init(Cipher.ENCRYPT_MODE, key1);
        byte baEncrypted[] = ciph.doFinal(baMessage);
        
        ciph.init(Cipher.DECRYPT_MODE, key2);
        byte baDecrypted[] = ciph.doFinal(baEncrypted);
        
        System.out.println("Message:  " + new String(Hex.encode(baMessage)));
        System.out.println("Encrypted:" + new String(Hex.encode(baEncrypted)));
        System.out.println("Decrypted:" + new String(Hex.encode(baDecrypted)));


Лично у меня оба ключевых массива идентичны и никаких эксепшенов не лезет.
PM Jabber   Вверх
DmTsarev
Дата 3.4.2008, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 11.7.2007

Репутация: нет
Всего: нет



        java.security.spec.InvalidKeySpecException: Inappropriate key specification
        at com.sun.crypto.provider.DESKeyFactory.engineGenerateSecret(DashoA13*..)
        at javax.crypto.SecretKeyFactory.generateSecret(DashoA13*..)

на этой строчке:
Код

SecretKey key2 = SecretKeyFactory.getInstance("DES").generateSecret(spec);


Опишите ваши средства разработки, пожайлуста.
PM MAIL   Вверх
Alexandr87
Дата 3.4.2008, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: 9
Всего: 39



DmTsarev, хм действительно, SUN овский провайдер что-то гонит.
Сейчас стал смотреть, у меня по-умолчанию еще BouncyCastle добавлен (boucycastle.org). В нем эта фича работает, если его убрать вываливаеся такое же исключение.

Надо будет на досуге глянуть, что там в SUN овском провайдере за дела такие.
PM Jabber   Вверх
DmTsarev
Дата 4.4.2008, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 11.7.2007

Репутация: нет
Всего: нет



В BouncyCastle действительно все без проблем. 
Спасибо за помощь.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1231 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.