首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Java 8 PKCS12密钥库中存储和获取自己的screct密钥

如何在Java 8 PKCS12密钥库中存储和获取自己的screct密钥
EN

Stack Overflow用户
提问于 2019-03-12 06:30:49
回答 1查看 1.4K关注 0票数 0

我试图将自己的密钥存储在PKCS12密钥存储库中。我尝试使用以下代码:

代码语言:javascript
复制
char[] passArray = "password".toCharArray();// this is key store pass

String key  = "test123"; // this is my own secret key

// Loading a Keystore
KeyStore p12KeyStore = KeyStore.getInstance("PKCS12");
p12KeyStore.load(new FileInputStream("testKeyStore.p12"), passArray);

存储我自己的密钥,如下所示:

代码语言:javascript
复制
byte [] byteKey = key.getBytes();

SecretKeySpec keySpec = new SecretKeySpec(byteKey, "DSA");

KeyStore.SecretKeyEntry secret = new KeyStore.SecretKeyEntry(keySpec);

KeyStore.ProtectionParameter password = new KeyStore.PasswordProtection(passArray);

p12KeyStore.setEntry("secret-key", secret, password);

但我不确定是否按照最佳实践存储自己的密钥。而且,当我试图从密钥库中获得我自己的密钥时,它并不像我原来的秘密密钥。

代码语言:javascript
复制
Key eKey = p12KeyStore.getKey("secret-key", passArray);

有人能帮我在PKCS12密钥库中存储和获取自己的秘密吗?

EN

回答 1

Stack Overflow用户

发布于 2019-03-25 14:49:11

您确定上面的代码有效吗?因为DSA是一个非对称算法,而不是一个对称算法。如果您确信这是一个秘密密钥,则必须是AESDESDESede (Triple )。上面的代码应该失败了。

以及你的问题的答案:

  • 就像数据库存储数据一样,密钥(密钥和密钥对)和证书应该存储在密钥存储库中,它们应该驻留在应用程序中。您应该从keystore中引用/检索它们。
  • 从你在其中一个陈述中说的,密钥不同于你最初存储并检索的密钥,从这个判断,我认为你拥有的密钥是一个Triple DES或一个DES密钥。DES/TripleDES使用奇偶校验位,奇偶校验位由Java SecretKeySpec校正。这导致钥匙看起来与原来不同,但实际上是一样的。您可以阅读更多有关奇偶校验位这里的信息。

作为一种最佳实践,您不应该将秘密密钥存储在PKCS12密钥中。internet标准定义,PKCS12密钥存储库只应包含与其证书链关联的一个KeyPair条目。尽管它可以包含多个条目,但理想的情况是只有一个条目,key passwordkeystore password相同。它们也可以存储秘密密钥,但最好以JCEKS密钥存储格式存储它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55115395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档