检查 Android 密钥库密钥密码的正确性

问题描述 投票:0回答:3

我正在自动化一些涉及 android keytool 和 jarsigner 的事情。该工具需要一个密钥库、密钥库的密码、别名和别名/密钥的密码,我正在尝试找到一种方法来显式检查所提供的别名/密钥的密码是否正确.

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

android keytool jarsigner
3个回答
144
投票

您还可以检查密码是否正确,而无需尝试更改密码。我通过使用以下命令列出密钥库的属性来完成此操作:

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

35
投票

您可以通过几种方式做到这一点:

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()));
如果密钥库密码错误,

将在第 4 行失败,并显示

java.io.IOException
;如果别名密码错误,则在第 7 行失败,并显示
java.security.UnrecoverableKeyException


0
投票

我检查了密钥别名和密码,如下所示:

keytool -list -keystore keystore.jks -alias <myalias> -storepass <mypassword>

// If success : mypassword, Feb 29, 2024, PrivateKeyEntry,
// Certificate fingerprint (SHA-256): 42:10:F3:00:.....:CF:AA
© www.soinside.com 2019 - 2024. All rights reserved.