Статус: Новичок
Группы: Участники
Зарегистрирован: 22.08.2012(UTC) Сообщений: 3 Откуда: Murom
|
Добрый день! Хотел бы узнать как создать сессионный ключ на основе значения хеш функции, иными словами нужен аналог CryptDeriveKey (CSP). В JCA это вроде называется password based encryption. Как такое сделать в JCP? Спасибо.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Здравствуйте. Посмотрите примеры в samples_src.jar (/Crypt_samples, /userSamples/ClassicEncrypt), в них показано, как вырабатывается сессионный ключ. |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 22.08.2012(UTC) Сообщений: 3 Откуда: Murom
|
Добрый день! Спасибо. Но примеры я конечно смотрел. Это немного не то. Есть серверное приложение (на СИ++ написанное), там ключ создает вызовом CryptDeriveKey на основе хеша пароля пользователя, на клиенте аналогично. Сейчас хочется иметь и джава клиент и использовать для выработки сессионого ключа хеш пароля без выработки дополнительных ключей согласования.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Попробуйте следующую схему, хотя мы не рекомендуем ее использовать, т.к. она небезопасна: Код:
// Вектор инициализации и исходное сообщение.
final byte[] iv = {1, 1, 1, 1, 1, 1, 1, 1};
final byte[] data = "Simple Text!".getBytes();
// 1. Получаете клиентский пароль и хешируете его - получаете 32 байта
byte[] clientPassword = "password".getBytes();
byte[] hashedPassword = MessageDigest.getInstance("GOST3411").digest(clientPassword);
// 2. Создаете сессионный ключ
CryptParamsSpec params = CryptParamsSpec.getInstance();
ru.CryptoPro.JCP.Key.SecretKeySpec spec = new ru.CryptoPro.JCP.Key.SecretKeySpec(hashedPassword, params);
SecretKey skey = new GostSecretKey(spec);
// 3. Шифруете сообщение.
Cipher cipher = Cipher.getInstance("GOST28147");
cipher.init(Cipher.ENCRYPT_MODE, skey, new IvParameterSpec(iv));
final byte[] encryptedtext = cipher.doFinal(data, 0, data.length);
// 4. Или расшифровываете.
cipher = Cipher.getInstance("GOST28147");
cipher.init(Cipher.DECRYPT_MODE, skey, new IvParameterSpec(iv));
final byte[] decryptedtext = cipher.doFinal(encryptedtext, 0, encryptedtext.length);
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 22.08.2012(UTC) Сообщений: 3 Откуда: Murom
|
Спасибо. Попробую Ваш пример. Это просто у нас одна из политик (самая простая), которую надо реализовать на java клиенте, а так есть и другие в том числе с использованием сертификата :-).
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 30.12.2021(UTC) Сообщений: 1
|
Здравствуйте! Имею примерно ту же задачу: необходимо повторить на клиенте ключ, сгенерированный на серверной стороне вызовом CryptDeriveKey из хэша. Пробую предложенный код, при вызове doFinal бросает исключение: java.lang.ClassCastException: ru.CryptoPro.Crypto.Key.GostSecretKey cannot be cast to ru.CryptoPro.JCSP.Key.GostSecretKey. При этом JCSP.KeyGostSecretKey, не имеет конструктора, принимающего ru.CryptoPro.JCP.Key.SecretKeySpec. Не подскажите, куда копать?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 27.01.2023(UTC) Сообщений: 11
Сказал(а) «Спасибо»: 3 раз
|
Автор: Kcrrrr Здравствуйте! Имею примерно ту же задачу: необходимо повторить на клиенте ключ, сгенерированный на серверной стороне вызовом CryptDeriveKey из хэша. Пробую предложенный код, при вызове doFinal бросает исключение: java.lang.ClassCastException: ru.CryptoPro.Crypto.Key.GostSecretKey cannot be cast to ru.CryptoPro.JCSP.Key.GostSecretKey. При этом JCSP.KeyGostSecretKey, не имеет конструктора, принимающего ru.CryptoPro.JCP.Key.SecretKeySpec. Не подскажите, куда копать? Та же проблема. Удалось найти решение?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Здравствуйте. Смешаны провайдеры - Crypto из JCP-дистрибутива и JCSP из JCSP-дистрибутива. Ошибка где-то в передаче в getInstance() не того имени провайдера. |
|
1 пользователь поблагодарил Евгений Афанасьев за этот пост.
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close