java - 为什么 keyStore.aliases() 对于 pkcs12 是空的

标签 java security encryption bouncycastle

我正在尝试使用以下代码从 .p12 文件加载私钥:

    Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
    java.security.KeyStore keyStore = KeyStore.getInstance("PKCS12", "BC");
    keyStore.load(new FileInputStream(new File("my_domain_com.p12")), password);
    keyStore.aliases().hasMoreElements(); //this is false
    java.security.PrivateKey privateKey = (PrivateKey) keyStore.getKey("SomeAlias", password);  

我正在尝试找出没有别名的原因。但我找不到。 空别名的原因是什么? 我想获取私钥并使用此 key 加密一些文本。还有其他方法吗?

我也有 .cer 文件,但我不确定是否应该一起使用。

最佳答案

有没有可能 keystore 里面什么都没有?使用 Java keytool 命令进行验证。

>keytool -list -v -keystore test.p12 -storetype PKCS12
Enter keystore password:

Keystore type: PKCS12
Keystore provider: SunJSSE

Your keystore contains 1 entry

Alias name: test_alias
Creation date: Sep 3, 2013
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
...
...

如果 keystore 中有条目,您应该会看到每个条目的“别名”。如果 keystore 中没有条目,您将看到“您的 keystore 包含 0 个条目”,您需要将它们导入 keystore 。

另外,加密的时候要用别人的公钥加密,别人用自己的私钥解密。他们用你的公钥加密,你用你的私钥解密。

关于java - 为什么 keyStore.aliases() 对于 pkcs12 是空的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18600126/

相关文章:

java - 解密时奇怪的字符串格式

android - Sugar ORM 指定加密 key

android - Android 的 Crashwrangler 或 !exploitable 等价物

asp.net - ASP.NET 中的安全异常和 IIS 7.5 中的“加载用户配置文件”选项

java - 使用 AES-GCM 中的 AAD

java - 如何为设备所有者配置自定义 Android Google 设置向导?

javax.net.ssl.SSLHandshakeException : no cipher suites in common no cipher suites in common

Java Swing 和 ActionListener

java - 如何从使用jsp从数据库打印的表中删除特定用户行

java - Java 'final' 关键字是否真的提高了安全性?