gpt4 book ai didi

java - 如何实现KeyStoreSpi.store(KeyStore.LoadStoreParameter param)?

转载 作者:行者123 更新时间:2023-11-30 03:56:49 25 4
gpt4 key购买 nike

我正在实现一个 Java key 存储,我可以重写的方法之一是 KeyStoreSpi.engineStore(KeyStore.LoadStoreParameter param) ,它应该根据提供的参数存储 key 存储。

我不明白如何实现这个方法,有两个原因:

  1. 显然param可以为空。在这种情况下,我的类如何知道在哪里存储数据?

  2. 假设 param 不为空 - 它仍然不提供任何输出位置信息。 LoadStoreParameter 参数是 ProtectionParameter 周围的松散包装。 ,这似乎只提供对密码信息的访问。同样,没有关于在哪里存储此 keystore 的信息。

关于如何解决这个问题有什么建议吗?我倾向于不重写此方法并依赖于默认实现,这会抛出UnsupportedOperationException。但这只是在回避问题。

我尝试在谷歌上搜索“extends KeyStoreSpi”来获取 key 存储源文件的示例,但似乎没有人实现此方法。我想这可能是有原因的......

最佳答案

仅当 keystore 格式不基于单个文件时才真正需要 KeyStore.engineStore(KeyStore.LoadStoreParameter)KeyStoreSpi.engineLoad(KeyStore.LoadStoreParameter) ,例如 keystore 本身是一个目录,条目是该目录内的各个文件。

当 keystore 格式是单个文件时,基于流的版本的 engineStore/engineLoad 通常就足够了,无需覆盖基于参数的版本。

假设 keystore 确实无法表示为单个文件,因此无法使用基于流的 API 加载或保存 keystore :

  1. KeyStore.engineStore(OutputStream,char[])KeyStore.engineStore(InputStream,char[]) 方法抛出 UnsupportedOperationException
  2. 创建类 MyLoadStoreParameter 实现 KeyStore.LoadStoreParameter ,它将包含存储或加载 keystore 所需的所有信息,例如上面示例的目录路径、密码等。使其不可变的是显然是一件好事。您的 keystore 实现甚至可以定义 keystore 的 LoadStoreParameter 的多个变体,具有多个外部表示形式。
  3. 相应地实现 KeyStore.engineStore(KeyStore.LoadStoreParameter)KeyStoreSpi.engineLoad(KeyStore.LoadStoreParameter)

KeyStore.LoadStoreParameter参数不是MyLoadStoreParameter的实例时,您应该抛出IllegalArgumentException。当参数为 null 时,这将自动覆盖情况。

检查参数类型并进行转换后,您只需使用参数中包含的信息继续以特定的外部表示形式写入或读取 keystore 。

关于java - 如何实现KeyStoreSpi.store(KeyStore.LoadStoreParameter param)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22957830/

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