我自动执行涉及android keytool和jarsigner的一些事情。该工具获取密钥库,密钥库的密码,别名和别名/密钥的密码,我试图找到一种方法来显式检查是否提供了别名/密钥的密码是对的。
有什么想法吗?另外,我需要在没有jar文件的情况下检查它 - 在我的上下文中获取该文件很长,所以我想早点而不是晚点中止。
答案 0 :(得分:47)
您也可以在不尝试更改密码的情况下检查密码是否正确。我通过使用以下命令列出密钥库的属性来完成它:
node-curl
答案 1 :(得分:16)
你可以通过以下两种方式实现:
一个。使用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()));
如果密钥库密码错误,将在第4行失败java.io.IOException
;如果别名密码错误,则第7行将失败java.security.UnrecoverableKeyException
。