java - 如何从命令行显示 Java keystore SecretKeyEntry

标签 java command-line keystore

我有一个使用存储类型 JCEKS 的 Java keystore 文件。它包含 SecretKeyEntry 条目。我希望能够从命令行转储存储在此文件中的实际 key 。我试过这个:

keytool -list -keystore secretkeys.jks -storetype JCEKS

哪个返回了

Keystore type: JCEKS
Keystore provider: SunJCE

Your keystore contains 1 entry

secret1, May 27, 2016, SecretKeyEntry

但这并没有向我显示 key 本身。如何从命令行提取和查看 key ?

最佳答案

使用 keytool 是不可能的。

将 keystore 转换为 PKCS#12 然后使用 OpenSSL 查看 key 也不起作用,因为这是一个对称 key (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));
}

这会将 key 打印为十六进制字符串(toString(),基数为 16)。

或者您可以使用 GUI 程序 KeyStore Explorer .

关于java - 如何从命令行显示 Java keystore SecretKeyEntry,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37487358/

相关文章:

java - Springs Rowmapper 抛出类型不匹配问题。

windows - 文件写入完成后处理文件 Windows Command Line .bat

python - 从命令行执行python脚本: error with imports

java - pkcs12 keystore key 的 NoSuchAlgorithm

java - 仅使用 CA 证书而不使用 keystore 的 SSLContext

java - Cassandra数据类型点燃数据类型

java - JSP 或 Servlet PrintWriter

java - rJava 无法在服务器上安装

linux - 重新打开以前在 bash 中使用 CTRL+X、CTRL+E 编写的命令的简单方法?

tomcat - 无法使用 JDK6 生成 keystore ,但可以使用 JDK5 生成