读取和写入文件的SecretKey

时间:2012-05-10 15:07:08

标签: java cryptography

我希望能够将DES SecretKey保存到文件中,以便稍后导入和使用它。 我看过几条路线,但它们看起来都有点啰嗦,难道没有简单的方法可以做到这一点吗?

3 个答案:

答案 0 :(得分:5)

使用a KeyStoreSecretKey保存到文件中的最“自然”方式是使用example in the documentation:这正是它的用途(当然,你也可以保存证书)。

{{3}}显示了如何保存私钥和密钥。它还将使用保护参数(此处为密码)对其进行加密。

答案 1 :(得分:3)

javax.crypto.SecretKey extends java.security.Key

java.security.Key extends java.io.Serializable

因此,如果您信任要存储密钥的文件系统,则可以使用java.io.ObjectOutputStream写出密钥并使用java.io.ObjectInputStream进行读取。

ObjectOutputStream oout = new ObjectOutputStream(outputStream);
try {
  oout.writeObject(myKey);
} finally {
  oout.close();
}

并且输入看起来类似

Key key;
ObjectInputStream oin = new ObjectInputStream(inputStream);
try {
  key = (Key) oin.readObject();
} finally {
  oin.close();
}

要生成密钥,您需要KeyFactorySecretKeyFactory

SecretKeyFactory factory = SecretKeyFactory.getInstance(algorithm);

然后生成一个秘密

factory.generateSecret(keySpec);

给出适合算法的关键规范。有关特定于算法的KeySpec实现的指示,请参阅KeySpec javadoc

对于DES,请参阅DESKeySpec,但您可能需要more modern

答案 2 :(得分:2)

不清楚一些事情:您认为“长篇大论”,您如何生成密钥,以及您拥有密钥的格式。如果您没有密钥,则可以使用keytool(实用程序)它与jdk一起生成它并将其放入一个名为keystore的文件中。您还可以使用KeyGenerator类和KeyStore类以编程方式执行相同的操作(两者都记录得很好,KeyStore javadoc有一个示例,它可以完全满足您的需要。)

如果这是长卷,您可以生成密钥并将其作为明文放入文本文件中。然后你可以使用BufferedReader访问它。这样安全性较低,因为任何有权访问此文件的人都会知道您的密钥,但这样会更容易一些。