根据我对documentation的理解,应该有可能通过服务"Windows-MY"
访问Microsoft Windows KeyStore。
当我从keyStore加载PrivateKey时,我获得了null
的privateKey.getEncoded()。
如何从Windows密钥库正确访问PrivateKey?
尝试使用以下方式访问它:
KeyStore ks = KeyStore.getInstance("Windows-MY");
ks.load(null);
PrivateKey privateKey = (PrivateKey) ks.getKey("myKeyAlias", null);
System.out.println("privateKey:" + privateKey));
System.out.println("getEncoded:" + privateKey.getEncoded());
我得到的输出:
privateKey:RSAPrivateKey [size=2048 bits, type=Exchange, container=myKeyAlias]
getEncoded:null
使用JRE 1.8并使用Win7和8.1进行测试
答案 0 :(得分:2)
MSCAPI似乎不支持私钥导出。
首先,Key.getEncoded()
javadoc指定:
以主编码格式返回密钥,如果此密钥不支持编码,则返回null。
如果您查看source code of the Java crypto provider for MSCAPI,getEncoded()
方法实际上会在所有情况下返回null
。