gpt4 book ai didi

java - KeyStore.load 不工作但 KeyStore.getkey 正在使用相同的密码

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:44:50 25 4
gpt4 key购买 nike

使用 java Keystore 类。

 InputStream keystoreStream = new FileInputStream(strKeystorePath); 
KeyStore keystore = KeyStore.getInstance("JCEKS");
keystore.load(keystoreStream, strTrustStorePwd.toCharArray());
Key key = keystore.getKey(strAliasName, strTrustStorePwd.toCharArray());

load() 方法抛出 keytool 错误:

java.io.IOException: Keystore was tampered with, or password was incorrect.

但是什么时候:使用

InputStream keystoreStream = new FileInputStream(strKeystorePath); 
KeyStore keystore = KeyStore.getInstance("JCEKS");
keystore.load(keystoreStream, null);
Key key = keystore.getKey(strAliasName, strTrustStorePwd.toCharArray());

它工作正常。请注意 loadgetKey 方法使用了相同的密码。

load()getKey 方法与密码一起使用时, load() 方法会抛出错误,但是当 load()null 密码和具有相同密码的 getKey 一起使用,它正在工作。

最佳答案

JCEKS 与 JKS 一样,(仅)使用商店级密码对整个商店进行完整性检查;如果您调用 .load(instream,null),它不会检查完整性但仍会加载内容——或尝试:如果数据实际上已被篡改或损坏,加载可能会在任何情况下失败多种方式,或看似成功但后来导致其他问题;但如果数据正确,它会加载。 (请注意,这不一定适用于其他 keystore 类型,例如 PKCS11。)

JCEKS 或 JKS 中的证书未加密,无需任何(更多)密码即可访问。私钥(如果有)是单独密码加密的,要访问私钥,您需要提供正确的 key 级密码,该密码可以与存储密码相同或不同。使 key 密码与存储密码相同通常不会造成混淆,通常希望减少混淆,但这不是必需的。

您显然有一个 JCEKS,其存储密码与您知道的值不同,但包含一个密码与该值匹配的 key 。如果你想改变它,在 .load(instream,null) 之后用 .store(outstream,desiredpassword) 重写它。

关于java - KeyStore.load 不工作但 KeyStore.getkey 正在使用相同的密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56144337/

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