Проверьте правильность пароля хранилища ключей Android

Я автоматизирую некоторые вещи, которые включают в себя Android Keytool и Jarsigner. Инструмент берет хранилище ключей, пароль для хранилища ключей, имя псевдонима и пароль для псевдонима / ключа, и я пытаюсь найти способ явно проверить, является ли предоставленный пароль для псевдонима / ключа правильным,

Есть идеи? Кроме того, мне нужно проверить его без JAR-файла, чтобы подписать - получение этого файла в моем контексте занимает много времени, поэтому я хочу прервать раньше, чем позже.

2 ответа

Решение

Вы также можете проверить правильность пароля, не пытаясь изменить пароль. Я сделал это, перечислив свойства хранилища ключей с помощью этой команды:

keytool -list -keystore <keystorefile> -storepass <passwordtocheck>

Вы можете сделать это несколькими способами:

А. с keytool

Если вы запустите команду keytool -keypasswd -keystore <keystore> -alias <alias> -storepass <storepass> -keypass <keypass> -new <keypass> тогда вы получите ошибку Keystore was tampered with, or password was incorrect если пароль хранилища ключей неправильный, или ошибка Cannot recover key если пароль псевдонима неверен. К сожалению, код возврата равен 1 в обоих случаях, поэтому вам нужно будет выполнить анализ выходных данных программы, если вы хотите знать тип ошибки.

Б. С небольшой программой на Java

Что-то вроде этого:

KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());

try (FileInputStream fis = new FileInputStream(keystore)) {
    ks.load(fis, ksPw.toCharArray());
}

ks.getEntry(alias, new KeyStore.PasswordProtection(aliasPw.toCharArray()));

потерпит неудачу в строке 4 с java.io.IOException если пароль хранилища ключей неправильный, или с java.security.UnrecoverableKeyException в строке 7, если пароль псевдонима является неправильным.

Другие вопросы по тегам