【发布时间】:2019-07-29 08:35:39
【问题描述】:
我想克隆一个 java keystore 实例。
我将主密钥库写入 ByteArrayOutputStream 并将其刷新到字节数组。然后我创建了一个新的密钥库实例并从 byteArray 作为 ByteArrayInputStream 加载。它工作得很好。只是想知道是否有更好的方法。
我找不到任何这样做的例子。如果我以正确的方式做事,我认为发布它至少会帮助那些想做类似事情的人。
public static void test() throws KeyStoreException, NoSuchAlgorithmException,
CertificateException, IOException, UnrecoverableKeyException
{
KeyStore originalKeyStore = KeyStore.getInstance( "JCEKS");
originalKeyStore.load( null, "1234".toCharArray());
Key originalKey = generateNewKey();
originalKeyStore.setKeyEntry( "keyAlias", originalKey, "1234".toCharArray(), null);
ByteArrayOutputStream os = new ByteArrayOutputStream();
originalKeyStore.store( os, "1234".toCharArray());
ByteArrayInputStream is = new ByteArrayInputStream( os.toByteArray());
KeyStore clonedKeyStore = KeyStore.getInstance( "JCEKS");
clonedKeyStore.load( is, "1234".toCharArray());
Key clonedKey = clonedKeyStore.getKey( "keyAlias", "1234".toCharArray());
String encodedOriginalKey = Base64.getEncoder().encodeToString( originalKey.getEncoded());
String encodedClonedKey = Base64.getEncoder().encodeToString( clonedKey.getEncoded());
System.out.println( "Original key:" + encodedOriginalKey);
System.out.println( "ClonedKey:" + encodedClonedKey);
System.out.println( "Key equality:" + encodedClonedKey.compareTo( encodedOriginalKey));
}
public static Key generateNewKey() throws NoSuchAlgorithmException
{
KeyGenerator kgen = KeyGenerator.getInstance( "AES");
kgen.init( 256, new SecureRandom());
return kgen.generateKey();
}
【问题讨论】:
-
如果您的代码正常工作,这似乎是code review 的问题
-
@Michael 谢谢。不知道存在。
标签: java instance clone keystore