密码保护加密密钥?

时间:2011-07-11 20:17:49

标签: java encryption key

好。所以我一直在搜索谷歌几天试图找到这个问题的答案。我正在尝试密码保护像keytool那样的公钥/私钥对的私钥。这需要在keytool不可用的环境中使用,而且,我想知道keytool是如何做到的。有谁知道如何用Java做到这一点?

3 个答案:

答案 0 :(得分:3)

使用password based encryption - 最好用于此目的。

Keytool本身并没有实现它。它在密钥库中实现。在java.security.KeyStoreSpi#engineSetKeyEntryjava.security.KeyStoreSpi#engineGetKey方法中更精确。 密钥库类型JKS在sun.security.provider.JavaKeyStore中实现。密码保护在sun.security.provider.KeyProtector中实施。 JKS以PKCS#8格式存储密钥,但使用自己的算法(OID 1.3.6.1.4.1.42.2.17.1.1)和SHA1。它是一种PBE。看看example of open JKS implementation

正如汤姆在下面提到的那样(在他的评论中),你可以看看sun.security.tools.KeyTool课程。

答案 1 :(得分:0)

由于您需要撤消存储的密码,因此通常会应用特定于应用程序的编码。

e.g。在WebSphere中,它是一个xor-ed哈希和一个base64编码。

它们通常具有存储文件或存储编码密码的配置文件。 (不是我不使用加密这个词)

这意味着密码不会被人无意间瞥见。但是,知道编码算法的人可以轻松解码,以便将存储文件或配置文件保存在安全的位置。

答案 2 :(得分:0)

最好的选择:使用带有盐的AES加密。在密码学方面,使用经过良好测试的技术通常是个好主意,而不是自己动手。这是另一篇文章,其答案应该回答您的所有问题:Java 256-bit AES Password-Based Encryption