我需要一个安全的存储器来存储对称密钥,同时支持.NET和Java。我需要能够以编程方式在两种语言中从同一存储器中存储和检索HmacSha*密钥,而不是通过命令行工具。
我的第一次尝试是使用PKCS12 keystore从Java生成并存储密钥,这是一种可移植的格式,我认为它支持存储X.509证书的私钥和密钥。
然而,到目前为止,我的经验是它不支持(注意:Java SE 6),在调用java.security.KeyStore.setKeyEntry()时抛出异常,指出我正在尝试存储的密钥不是PrivateKey。
我找到了一篇文章声称这应该是可能的:http://www.pixelstech.net/article/1420427307-Different-types-of-keystore-in-Java----PKCS12 但是,如果我从该文章中提取示例代码(标题为“存储秘密密钥”的部分下的示例),我会在调用setKeyEntry()时得到相同的异常。
是否有人知道我是否可以使用Java中的PKCS12 keystore满足这些要求?
顺便说一句,以下是代码:
我的第一次尝试是使用PKCS12 keystore从Java生成并存储密钥,这是一种可移植的格式,我认为它支持存储X.509证书的私钥和密钥。
然而,到目前为止,我的经验是它不支持(注意:Java SE 6),在调用java.security.KeyStore.setKeyEntry()时抛出异常,指出我正在尝试存储的密钥不是PrivateKey。
我找到了一篇文章声称这应该是可能的:http://www.pixelstech.net/article/1420427307-Different-types-of-keystore-in-Java----PKCS12 但是,如果我从该文章中提取示例代码(标题为“存储秘密密钥”的部分下的示例),我会在调用setKeyEntry()时得到相同的异常。
是否有人知道我是否可以使用Java中的PKCS12 keystore满足这些要求?
顺便说一句,以下是代码:
public void gen( String thePath, String thePassword ) throws Exception {
KeyGenerator keygen = KeyGenerator.getInstance("HmacSHA1");
Key key = keygen.generateKey();
KeyStore keystore = KeyStore.getInstance("PKCS12");
keystore.load(null, null);
// This call throws an exception
keystore.setKeyEntry("theKey", key, thePassword.toCharArray(), null);
keystore.store( new FileOutputStream(thePath), thePassword.toCharArray() );
}
编辑: 嗯——研究一下.NET方面的情况发现,没有直接的编程支持来使用PKCS12格式导入/导出对称密钥。最好的方法似乎是拥有一个X.509密钥对,用它来加密对称密钥,并将该对和加密的对称密钥一起存储/传输到需要使用对称密钥的任何其他系统的PKCS12文件中。
有人遇到了同样的问题并找到了可行的解决方案吗?