检查android keystore keypass的正确性

Nar*_*tor 33 android keytool jarsigner

我正在自动化一些涉及android keytool和jarsigner的东西.该工具获取密钥库,密钥库的密码,别名和别名/密钥的密码,我正在尝试找到一种方法来显式检查别名/密钥的提供密码是否正确.

有任何想法吗?另外,我需要在没有jar文件的情况下检查它 - 在我的上下文中获取该文件很长,所以我想早点而不是晚点中止.

Jef*_*Fay 57

您也可以在不尝试更改密码的情况下检查密码是否正确.我通过使用此命令列出密钥库的属性来完成它:

keytool -list -keystore <keystorefile> -storepass <passwordtocheck>
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这不会测试别名密码的正确性 (9认同)
  • @VijayKumar 下面的答案使用“keytool -keypasswd”来尝试更改别名的密码(更改为相同的密码),如果密码不正确,则会失败。 (2认同)

rxg*_*rxg 20

您可以通过以下几种方式实现:

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,因此如果您想要了解错误类型,则需要解析程序的输出.

B.使用小型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()));
Run Code Online (Sandbox Code Playgroud)

java.io.IOException如果密钥库密码错误,则在第4行将失败; java.security.UnrecoverableKeyException如果别名密码错误,则在第7行失败.