密码的Java密钥库

时间:2014-01-28 19:21:41

标签: java keystore

是否可以使用Java Keystore存储密码,尤其是Web服务等? 我找到了有关存储SSL密钥的在线信息,但这对我的需求来说是过度杀戮。

1 个答案:

答案 0 :(得分:1)

是的,根据密钥库的类型,您可以在SecretKeyEntry中创建KeyStore。 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();
  }
}

一旦使用完密码,您应该小心将密码“归零”,就像我在try-finally块中的destroy()实例PasswordProtection一样。否则,像Target breach中使用的内存刮板更有可能获取密钥。