如何从命令行显示 Java 密钥库 SecretKeyEntry
How to display Java keystore SecretKeyEntry from command line
我有一个使用存储类型 JCEKS 的 Java 密钥库文件。它包含 SecretKeyEntry 条目。我希望能够从命令行转储存储在此文件中的实际密钥。我试过这个:
keytool -list -keystore secretkeys.jks -storetype JCEKS
返回
Keystore type: JCEKS
Keystore provider: SunJCE
Your keystore contains 1 entry
secret1, May 27, 2016, SecretKeyEntry
但这并没有向我显示密钥本身。如何从命令行中提取和查看密钥?
密钥工具无法做到这一点。
将密钥库转换为 PKCS#12 然后使用 OpenSSL 查看密钥也不起作用,因为这是一个对称密钥 (SecretKeyEntry)。
如果您受困于命令行,您可以编写一个 Java 小程序来执行此操作。像这样:
String fileName = "secretkey.ks";
char[] password = "mypassword".toCharArray();
String alias = "secret1";
KeyStore ks = KeyStore.getInstance("JCEKS");
try (FileInputStream fis = new FileInputStream(fileName)) {
ks.load(fis, password);
SecretKey secretKey = (SecretKey) ks.getKey(alias, password);
System.out.println(new BigInteger(1, secretKey.getEncoded()).toString(16));
}
这会将密钥打印为十六进制字符串(toString()
,基数为 16)。
或者您可以使用 GUI 程序 KeyStore Explorer。
我有一个使用存储类型 JCEKS 的 Java 密钥库文件。它包含 SecretKeyEntry 条目。我希望能够从命令行转储存储在此文件中的实际密钥。我试过这个:
keytool -list -keystore secretkeys.jks -storetype JCEKS
返回
Keystore type: JCEKS
Keystore provider: SunJCE
Your keystore contains 1 entry
secret1, May 27, 2016, SecretKeyEntry
但这并没有向我显示密钥本身。如何从命令行中提取和查看密钥?
密钥工具无法做到这一点。
将密钥库转换为 PKCS#12 然后使用 OpenSSL 查看密钥也不起作用,因为这是一个对称密钥 (SecretKeyEntry)。
如果您受困于命令行,您可以编写一个 Java 小程序来执行此操作。像这样:
String fileName = "secretkey.ks";
char[] password = "mypassword".toCharArray();
String alias = "secret1";
KeyStore ks = KeyStore.getInstance("JCEKS");
try (FileInputStream fis = new FileInputStream(fileName)) {
ks.load(fis, password);
SecretKey secretKey = (SecretKey) ks.getKey(alias, password);
System.out.println(new BigInteger(1, secretKey.getEncoded()).toString(16));
}
这会将密钥打印为十六进制字符串(toString()
,基数为 16)。
或者您可以使用 GUI 程序 KeyStore Explorer。