检查 android 密钥存储库密码是否正确

我正在自动化一些涉及到 android 键盘工具和 Jarsigner 的东西。该工具获取密钥存储库、密钥存储库的密码、别名名称和别名/密钥的密码,我试图找到一种方法来显式检查别名/密钥提供的密码是否正确。

有什么想法吗?此外,我需要检查它没有一个 jar 文件签名-获取该文件在我的上下文是冗长的,所以我想中止尽快而不是以后。

45235 次浏览

你可以采取以下几种方式:

A 和 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将失败; 如果别名密码错误,第7行的 java.security.UnrecoverableKeyException将失败。

您还可以在不尝试更改密码的情况下检查密码是否正确。我使用以下命令列出了 keystore 的属性:

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