【问题标题】:Password protect encryption keys?密码保护加密密钥?
【发布时间】:2011-07-11 20:17:49
【问题描述】:

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

【问题讨论】:

    标签: java encryption key


    【解决方案1】:

    使用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 类。

    【讨论】:

    • 你可以阅读KeyTool.java,然后从那里开始。
    • @tom:拍得很好。我将其添加到帖子中。
    • 谢谢(:看来我要使用 PBE 了。
    【解决方案2】:

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

    例如在 WebSphere 中,它是一个异或哈希和 base64 编码。

    它们通常有一些类似存储文件或一些配置文件来存储编码密码。 (不是我不用加密这个词)

    这意味着密码不能轻易被某人无意中看到。但是,知道编码算法的人可以轻松对其进行解码,因此需要将存储文件或配置文件保存在安全位置。

    【讨论】:

    • 使用 stash 文件是可逆的(著名的 unstash.pl 脚本),所以在 WebSphere 中也异或密码。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2011-02-01
      • 1970-01-01
      • 2021-12-25
      • 2015-11-25
      • 1970-01-01
      • 1970-01-01
      • 2019-08-04
      • 1970-01-01
      • 2020-07-26
      相关资源
      最近更新 更多