#java #security #encryption
Вопрос:
Я создаю файл хранилища ключей с помощью Java API, т. е. эквивалентной команде java
keytool -genseckey -alias some.alias -keyalg AES -keysize 128 -keypass lt;an encrypted byte stringgt; -storetype JCEKS -keystore lt;filenamegt; –storepass lt;some_pwdgt;
код : …
key=get128MD5(strToHash); System.out.println(String.format("Hashing value : '%s' ", Hex.toHexString(key))); try { KeyStore.ProtectionParameter protParam = new KeyStore.PasswordProtection("XXXXX".toCharArray ()); javax.crypto.SecretKey mySecretKey=new SecretKeySpec(key,"AES"); KeyStore.SecretKeyEntry skEntry = new KeyStore.SecretKeyEntry(mySecretKey); ks.setEntry(alias, skEntry, protParam); try (FileOutputStream fos = new FileOutputStream("filename")) { ks.store(fos, "XXXXX".toCharArray ()); fos.close(); } catch (FileNotFoundException e1) { e1.printStackTrace(); } } catch (KeyStoreException e1) { ... above error happens when trying to load from keystore file : public static Key getKey(String keyalias,byte[] keypassbyte) throws KeyStoreException { Key key = null; try{ if(ks!=null){ log.info("Getting key from Keystore."); key =ks.getKey(keyalias, Hex.toHexString(keypassbyte).toCharArray()); } if(key==null){ throw new KeyStoreException("Failed to get secret key entry."); } }catch (NoSuchAlgorithmException nsae) { throw new KeyStoreException("Algorithm for recovering the secret key cannot be found." nsae.getMessage()); ` }catch (UnrecoverableEntryException uee) { throw new KeyStoreException("Invalid entry password to recover secret." uee.getMessage()); }catch (KeyStoreException kse) { throw new KeyStoreException("Failed to get secret key entry." kse.getMessage()); }catch(NullPointerException ex){ throw new NullPointerException("NullPointerException " ex.getMessage()); } catch (RuntimeException e) { throw new RuntimeException("Failed to get secret key." e.getMessage()); } return key;
Есть идеи, где что-то идет не так ? Я пробовал разные варианты метода «ks.setKey» и включал параметр длины, который не помог. Я использую WIN10 и Eclipse/Java 1.8
Спасибо
Ответ №1:
key =ks.getKey(keyalias, Hex.toHexString(keypassbyte).toCharArray())
Пытаетесь использовать шестнадцатеричную форму пароля? Почему? Просто используйте то же самое, что и при создании ключа