6

我希望能够将 DES SecretKey 保存到文件中,以便您以后可以导入和使用它。看了几条路线,都觉得有点啰嗦,难道就没有简洁简单的方法吗?

4

3 回答 3

7

在 Java 中将 a保存到文件中最“自然”的方法SecretKey是使用aKeyStore : 这正是它的用途(当然,您也可以保存证书)。

文档中的示例显示了如何保存私钥和密钥。它还将使用保护参数(此处为密码)对其进行加密。

于 2012-05-10T15:49:14.050 回答
6

javax.crypto.SecretKey extends java.security.Key

java.security.Key extends java.io.Serializable

因此,如果您信任存储密钥的文件系统,您可以使用 写出密钥java.io.ObjectOutputStream并在 using 中读取它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);

给定一个适合算法的关键规范。有关算法特定实现的指针,请参见KeySpecjavadoc 。KeySpec

对于 DES,看看DESKeySpec你可能想要更现代的 .

于 2012-05-10T15:37:18.440 回答
2

不清楚一些事情:您认为“冗长”,您如何生成密钥,以及您拥有的密钥格式。如果您没有密钥,您可以使用 keytool (一个实用程序附带jdk) 生成它并将其放入一个称为密​​钥库的文件中。您还可以使用 KeyGenerator 类和 KeyStore 类以编程方式执行相同的操作(两者都有很好的文档,并且KeyStore javadoc有一个示例,它完全符合您的要求。)

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

于 2012-05-10T15:51:04.733 回答