使用Keystore存储密钥

时间:2012-02-07 09:07:53

标签: java security encryption cryptography password-protection

我正在使用密钥库来保护文件中的私钥(使用该文件的密码)。我不明白这段代码

// save my secret key
javax.crypto.SecretKey mySecretKey;
KeyStore.SecretKeyEntry skEntry =
    new KeyStore.SecretKeyEntry(mySecretKey);
ks.setEntry("secretKeyAlias", skEntry, 
    new KeyStore.PasswordProtection(password));

// store away the keystore
java.io.FileOutputStream fos = null;
try {
    fos = new java.io.FileOutputStream("newKeyStoreName");
    ks.store(fos, password);
} finally {
    if (fos != null) {
        fos.close();
    }
}

setEntry在做什么? 我们是通过fileoutputstream保存私钥吗?如果是真的那么文件的密码在哪里??? 文件的扩展名是什么?是.jks ??

1 个答案:

答案 0 :(得分:6)

Java密钥库是加密对象的容器。它可以包含对称密钥,私钥和证书。 setEntry()方法向密钥库添加了另一个条目。在您的情况下,它会添加一个由“secretKeyAlias”标识的对称密钥,并通过密码保护密钥库。如果您想保存私钥,则应该创建一个KeyStore.PrivateKeyEntry

在内存中创建密钥库后,可以将其存储在磁盘上。密钥库有一个store()-method,它将密钥库写入Stream。在这种情况下,FileOutputStream。还会在密钥库中添加MAC,并受密码保护。在您的情况下,密码与上面使用的密码相同,但这不是必需的。

Java密钥库的常用扩展名是.jks,但您的代码只是将其存储在名为“newKeyStoreName”的文件中。