2013-08-26 1 views
0

У меня есть функция, которая создает большие целочисленные значения. Я хочу использовать эти значения в качестве записей секретных ключей в Keystore. Я хочу знать, есть ли способ добавить эти значения Big-integer в качестве секретных ключей к хранилищу ключей. Я пытался отличить отличное целочисленное значение к секретному ключу, но у него появляется ошибка, из-за которой большое целое не может быть применено к секретному ключу. вот лучшее, что я получил до сих пор.Как передать предопределенное значение в качестве секретной клавиши в хранилище ключей

KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); 
char[] password = "ps".toByteArray(); 
ks.load(null, password); 
.... 
BigInteger sect=getsect(); 
javax.crypto.SecretKey mySecretKey=(SecretKey)sect; 
KeyStore.SecretKeyEntry skEntry = 
    new KeyStore.SecretKeyEntry(mySecretKey); 
ks.setEntry("secretKeyAlias", skEntry, 
    new KeyStore.PasswordProtection(password)); 

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

java.math.BigInteger cannot be cast to javax.crypto.SecretKey 

ответ

0
  • a tutorials
  • generateSecret() api

    PBEKeySpec KeySpec = новый PBEKeySpec (password.toCharArray());

    SecretKeyFactory kf = SecretKeyFactory.getInstance ("PBEWithMD5AndDES");

    SecretKey passwordKey = kf.generateSecret (keySpec);

+0

Благодарю вас за ваш ответ, однако, хотя я избавился от ошибки кастинга, появилась новая ошибка: нельзя хранить не-личные ключи, хотя я специально храню секретную клавишу. – eskoba

+0

вставить журнал ошибок –

+0

error: java.security.KeyStoreException: не может хранить не-частные ключи // это происходит, когда я пытаюсь установитьEntry() хранилища ключей на этот код ks.setEntry ("secretKeyAlias", skEntry, new KeyStore.PasswordProtection (пароль)); – eskoba

Смежные вопросы