gpt4 book ai didi

java - KeyStore.load 在空 .jks 文件上抛出 IOException

转载 作者:行者123 更新时间:2023-12-02 09:19:42 25 4
gpt4 key购买 nike

我需要创建一个空的 KeyStore 文件(名为 KeyStoreAES.jks),然后将 AES SecretKey 存储到该文件中,所有这些都是通过 Java 编程实现的。

我有一个创建 .jks 文件的函数:

//Función that creates KeyStoreAES.jks
private static void CreateKeyStoreAES(String path)
{
try
{
//Check if file already exists
File keyStoreFile = new File(path);

if (keyStoreFile.exists())
{
keyStoreFile.delete();
} //if

keyStoreFile.createNewFile();
}
catch (IOException ex)
{
System.out.println("IOException");
}
} //CrearKeyStoreAES

这个功能运行良好。然后我有另一个函数将 key 插入该文件:

//Storing Key into KeyStore file
private static void StoreKey(String path, SecretKey key)
{
try
{
//KeyStore
KeyStore ks = KeyStore.getInstance("JKS"); //JCEKS, JKS

//FileInputStream
FileInputStream fis = new FileInputStream(path);

//Load KeyStore file
ks.load(fis, keyStorePass);
}
catch (CertificateException ex)
{
System.out.println("CertificateException");
}
catch (IOException ex)
{
System.out.println("IOException");
}
catch (KeyStoreException ex)
{
System.out.println("KeyStoreException");
}
catch (NoSuchAlgorithmException ex)
{
System.out.println("NoSuchAlgorithmException");
} //try
} //StoreKey

从 KeyStore 类调用加载函数抛出 IOException。这是因为尝试加载的文件是空的吗?据我在互联网上搜索到的,要将 key 插入到 KeyStore 中,您需要将该文件加载到 KeyStore 对象中。

最佳答案

是的,JKS 格式需要 header 和尾部信息,因此空文件不是有效的 JKS,并且没有条目的 JKS 也不是空文件。

要“从头开始”创建 JKS,不要加载任何文件/数据:

KeyStore ks = KeyStore.getInstance("JKS");
ks.load(null); // NO INPUTSTREAM HERE
...
ks.setKeyEntry(...); // or .setEntry(...) as desired
...
OutputStream fo = Files.newOutputStream(Path.of("myfile")); // or similar
ks.store(fo,password); fo.close();

但是,JKS 格式不支持 SecretKey 条目,因此这仍然无法解决您的问题。您需要使用其他格式,例如 JCEKS 或 PKCS12,或 BouncyCaSTLe 的 BKS - 所有这些格式也不能有效地为空文件。

关于java - KeyStore.load 在空 .jks 文件上抛出 IOException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58771426/

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