我希望能够将DES SecretKey保存到文件中,以便稍后导入和使用它。 我看过几条路线,但它们看起来都有点啰嗦,难道没有简单的方法可以做到这一点吗?
答案 0 :(得分:5)
使用a KeyStore
将SecretKey
保存到文件中的最“自然”方式是使用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();
}
要生成密钥,您需要KeyFactory
或SecretKeyFactory
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访问它。这样安全性较低,因为任何有权访问此文件的人都会知道您的密钥,但这样会更容易一些。