0
是否可以使用Java密鑰庫存儲密碼,特別是對於WebServices等? 我發現了有關存儲SSL密鑰的在線信息,但這對我的需求來說太過於扼殺了。用於密碼的Java密鑰庫
是否可以使用Java密鑰庫存儲密碼,特別是對於WebServices等? 我發現了有關存儲SSL密鑰的在線信息,但這對我的需求來說太過於扼殺了。用於密碼的Java密鑰庫
是的,根據密鑰存儲的類型,您可以在KeyStore
中創建SecretKeyEntry
。 SunJCE提供程序實現了一個可容納密鑰條目的「JCEKS」密鑰存儲區。
static byte[] getPassword(KeyStore ks, String alias, char[] master)
throws GeneralSecurityException, DestroyFailedException
{
if (!ks.entryInstanceOf(alias, KeyStore.SecretKeyEntry.class))
throw new IllegalArgumentException();
KeyStore.PasswordProtection pp = new KeyStore.PasswordProtection(master);
try {
KeyStore.SecretKeyEntry e = (KeyStore.SecretKeyEntry) ks.getEntry(alias, pp);
return e.getSecretKey().getEncoded();
}
finally {
pp.destroy();
}
}
static void setPassword(KeyStore ks, String alias, byte[] password, char[] master)
throws GeneralSecurityException, DestroyFailedException
{
SecretKey wrapper = new SecretKeySpec(password, "RAW");
KeyStore.SecretKeyEntry entry = new KeyStore.SecretKeyEntry(wrapper);
KeyStore.PasswordProtection pp = new KeyStore.PasswordProtection(master);
try {
ks.setEntry(alias, entry, pp);
}
finally {
pp.destroy();
}
}
你應該儘快小心「零」的密碼,你使用的是他們做的,就像我destroy()
的PasswordProtection
例如在一個try-finally塊。否則,目標違規中使用的內存刮取器更有可能抓取密鑰。
任何教程鏈接或示例代碼片段? –
@DaSh我添加了一些代碼來展示如何使用條目。希望您已經理解如何加載和保存密鑰存儲區,並安全地提示輸入主密碼並對字符數組中的其他密碼進行編碼/解碼。包含的代碼對於這種格式已經很難處理。 – erickson