【问题标题】:BCrypt (blowfish) password for AES 256 (Rijndael) encrypted textAES 256 (Rijndael) 加密文本的 BCrypt (blowfish) 密码
【发布时间】:2011-09-03 13:54:20
【问题描述】:

我决定尝试使用 BCrypt 作为 AES256 (Rijndael/CBC) 的散列密钥。

问题是 AES256 密钥必须是 32 字节长。 BCrypt 密钥长 60 个字节,自然总是不同的。也许应该归咎于相当艰难和漫长的一周,但我无法看到如何使用 BCrypt 散列的密钥与 AES256 结合使用。我只是又累又瞎,还是没有办法做到这一点?

谢谢

【问题讨论】:

  • 呃,取前 32 个字节并丢弃其余的?

标签: java security encryption hash aes


【解决方案1】:

您是否尝试散列某些内容(如密码)并将其用作 AES 密钥?

我不熟悉 BCrypt,但 SHA-256 会创建一个与 AES 256 密钥大小相同的散列。或者,如果您一心想要使用 BCrypt,您可以只读取该哈希的前 32 个字节并丢弃其余字节。

【讨论】:

  • 我显然精神崩溃了 :)。谢谢。
【解决方案2】:

我认为您不应该从加密计算中丢弃字节,因为这些字节应该支持您保留的其他字节 - 丢弃一些会削弱输出。

【讨论】:

  • 这取决于上下文。您还可以丢弃 ECDSA 中的哈希字节,这很好。但我同意您应该确切地知道自己在做什么。
【解决方案3】:

您需要的是一个安全的Key Derivation Function。有时按照 cmets 中的建议截断字节是可行的,但它始终取决于上下文,因此如果您不确定,请不要这样做。

在您需要“拉伸”输入的情况下,截断无论如何都不起作用,这也是最容易出错的地方。如果您无法使用安全随机生成器创建密钥,通常您想要做的是将一些非随机输入(例如密码)转换为有价值的密钥材料。显然,非随机数据的熵通常不足以达到目的。

如果您想将密码转换为 AES 或任何其他对称加密算法的任意长度密钥,请查看 PKCS#5 并使用其 PBKDF2。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 2012-07-20
    • 2015-04-21
    相关资源
    最近更新 更多