J'automatise certaines choses qui impliquent le Android keytool et jarsigner. L'outil prend un fichier de clés, le mot de passe pour le fichier de clés, le nom d'alias et le mot de passe pour l'alias/clé, et je J'essaie de trouver un moyen de vérifier explicitement si le mot de passe fourni pour l'alias/clé est correct.
Des idées? En outre, je dois le vérifier sans fichier jar à signer - obtenir ce fichier dans mon contexte est long, donc je veux abandonner le plus tôt possible.
Vous pouvez également vérifier si le mot de passe est correct sans tenter de changer le mot de passe. Je l'ai fait en listant les propriétés du magasin de clés avec cette commande:
keytool -list -keystore <keystorefile> -storepass <passwordtocheck>
Vous pouvez le faire de deux manières:
A. Avec keytool
Si vous exécutez la commande keytool -keypasswd -keystore <keystore> -alias <alias> -storepass <storepass> -keypass <keypass> -new <keypass>
alors vous obtiendrez l'erreur Keystore was tampered with, or password was incorrect
si le mot de passe du fichier de clés est incorrect ou si l'erreur Cannot recover key
si le mot de passe de l'alias est incorrect. Malheureusement, le code retour est 1 dans les deux cas, vous devrez donc analyser la sortie du programme si vous voulez être intelligent sur le type d'erreur.
B. Avec un petit programme Java
Quelque chose dans ce sens:
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()));
échouera à la ligne 4 avec un Java.io.IOException
si le mot de passe du magasin de clés est incorrect, ou avec un Java.security.UnrecoverableKeyException
à la ligne 7 si le mot de passe d'alias est incorrect.