根據this article公鑰和私鑰與「正常」RSA密鑰沒有區別。因此,您可以使用相同的RSAPublicKey
和RSAPrivateCrtKey
作爲容器。問題在於KeyStore
的實現非常有限(pkcs#12,jks,jceks) - 它們不能用於存儲單個私鑰。您需要爲公鑰創建一個證書鏈。這可能是一個自簽名證書,但存儲密鑰卻相當麻煩。
你也可以創建自己的KeyStore
實現,但這似乎是一個巨大的工作量。在你自己的提供者中實現KeyStoreSpi
稍微不復雜,但它需要你的提供者使用私鑰和由Oracle簽名的證書進行簽名。
基本上我會去上面解釋的自簽名證書技巧或與鄧肯提出的序列化方案。
對於非信徒:
Exception in thread "main" java.lang.IllegalArgumentException: invalid zero-length input chain
at java.security.KeyStore$PrivateKeyEntry.<init>(KeyStore.java:393)
和
Exception in thread "main" java.lang.NullPointerException: invalid null input
at java.security.KeyStore$PrivateKeyEntry.<init>(KeyStore.java:390)
的可能重複[?如何使用密鑰庫中的Java存儲私鑰(http://stackoverflow.com/問題/ 9890313 /如何使用密鑰存儲在java中的存儲私鑰) – Drunix
@Drunix如果這是一個普通的私鑰,這將是一個騙局。現在不是很多。 –
@owlstead:至少在鏈接帖子中接受的答案顯示瞭如何在不使用密鑰庫的情況下存儲公鑰,如果您將密鑰的模數和指數設置爲BigIntegers。私鑰可以做同樣的事情。所以如果我們不把它稱爲完美的重複,那麼答案可能非常有用。此外,他們還演示瞭如何使用KeySpecs將作爲組件給定的鍵轉換爲鍵。所以如果OP真的想要使用密鑰庫,這可能會有所幫助(留下從公鑰創建證書的問題)。 – Drunix