2015-03-30 28 views
0

我想将SecretKey存储在受PublicKey保护的Java KeyStore中。当我加载受保护的KeyEntry时,我想如何将SecretKey存储在受公钥保护的Java KeyStore中(RSAPasswordProtection)?

  1. 获取受保护的密钥字节数组以便稍后用PrivateKey手动解包。
  2. 让KeyStore在移交PrivateKey时处理解包。

使用setEntry() - 已包装字节数组的方法是可能的。也可以通过使用getEntry()方法来获得包装的字节数组。为了加密SecretKey,setEntry() - Method支持ProtectionParameter的使用。唯一可以找到的ProtectionParameter是PasswordProtection参数。

有谁知道Java KeyStore的RsaProtection?或者有另外一种方法可以使用PublicKey包装SecretKey并使用PrivateKey取回它?

回答

0

Java密钥存储当然无法处理这个;他们主要使用对称加密来保护密钥存储。虽然可以包装和解开包装。我已经展示了这一点使用OAEP而不是更不安全"RSA"(PKCS#1)加密:

Cipher rsa = Cipher.getInstance("RSA/ECB/OAEPWithSHA1AndMGF1Padding"); 
rsa.init(Cipher.WRAP_MODE, keyPair.getPublic()); 
byte[] wrapped = rsa.wrap(aesKey); 

rsa.init(Cipher.UNWRAP_MODE, keyPair.getPrivate()); 
SecretKey unwrappedAESKey = (SecretKey) rsa.unwrap(wrapped, "RSA", Cipher.SECRET_KEY); 
+0

我会想你也许可以做到这一点,但你可能会写自己的'SecretKey',实现类。但密钥库肯定会用自己的密码重新加密密钥。 – EJP 2015-03-31 00:40:23

+0

@EJP可能,但它需要一个可怕的muckin周围的JCA。当然,如果你可以签署你自己的提供者,你可以做任何事情;) – 2015-03-31 00:42:34

相关问题