gpt4 book ai didi

java - KeyStore.getKey() 返回 null

转载 作者:行者123 更新时间:2023-12-02 11:44:10 29 4
gpt4 key购买 nike

我使用 keytool 和以下命令生成了一个 keystore :

keytool -genkey -alias serverprivate -keystore serverprivate.jks -storetype JKS -keyalg RSA -sigalg SHA256withRSA -keysize 2048 -storepass doyouknowdewey

key 通行证和商店通行证是相同的。然后我提取公钥并将其插入到它自己的 keystore 中:

keytool -export -alias serverprivate -keystore serverprivate.jks -file temp.key -storepass doyouknowdewey
keytool -import -noprompt -alias serverpublic -keystore serverpublic.jks -file temp.key -storepass public

现在我使用 keystore 在 java 中创建一个 InputStream 并创建一个 KeyStore 对象:

InputStream is = getClass().getResourceAsStream("keys/serverprivate.jks");
KeyStore serverPrivate = KeyStore.getInstance("JKS");
serverPrivate.load(is, "doyouknowdewey".toCharArray());

我提取 key 来创建密码实例,以便可以加密和解密文本:

Key key = serverPrivate.getKey("serverprivate", "douyouknowdewey".toCharArray());

一切正常,我可以使用私钥加密数据。但是,如果我尝试使用公钥解密/加密,则 Key 对象为 null:

InputStream is = getClass().getResourceAsStream("keys/serverpublic.jks");
KeyStore serverPublic = KeyStore.getInstance("JKS");
serverPublic.load(is, "public".toCharArray());
Key key = serverPrivate.getKey("serverpublic", "public".toCharArray());
if(key == null) {
System.err.println("Key is null");
}
//returns null

那么我该如何完成这项工作呢?

编辑:

显然 serverpublic 不是 key ,而是证书。我通过运行 serverPublic.isKeyEntry("serverpublic"); 发现,它返回 false,而 serverPublic.isCertificateEntry("serverpublic"); 返回 true。所以我将代码更改为:

InputStream is = getClass().getResourceAsStream("keys/serverpublic.jks");
KeyStore serverPublic = KeyStore.getInstance("JKS");
serverPublic.load(is, "public".toCharArray());
Certificate cert = serverPrivate.getCertificate("serverpublic");
if(cert == null) {
System.err.println("Key is null");
}

这不再返回 null。但是当我运行这个时,cipher.init仍然抛出一个空指针异常:

Cipher cipher;
cipher.init(Cipher.ENCRYPT_MODE, cert);

最佳答案

serverpublic 不是 key ,而是证书。我必须使用

加载它
Certificate cert = serverPrivate.getCertificate("serverpublic");

然后调用

Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, cert);

关于java - KeyStore.getKey() 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48325491/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com