【问题标题】:AES decryption using user-defined key使用用户定义的密钥进行 AES 解密
【发布时间】:2014-03-31 11:21:36
【问题描述】:

有没有办法使用用户定义的密钥使用 WinCrypt API 进行 AES 解密?据我了解阅读文档和示例,标准方法是使用 Windows 加密 API 生成随机密钥,将此密钥导出到文件并使用它进行解密。

但我需要允许用户定义自己的加密/解密密码。

【问题讨论】:

  • 您是在问WinCrypt 是否支持PBE(基于密码的加密)?我问是因为您显然混淆了 AES 对称密钥(128,192 或 256 位,具体取决于选择的算法)和用户提供的密码(可以是任何密码)。这种 PBE 通常使用摘要算法在昂贵的(故意)迭代次数上完成,以将用户密钥转换为对称算法密钥,并且有标准算法可以做到这一点。
  • @WhozCraig:看来我需要测试服,是的。我可以用 WinCrypt API 做吗?
  • 我从未使用过 WinCrypt 来执行 PBE,但如果他们在某种程度上不支持它,我会感到震惊。 key derivation function 以及适当的摘要算法和选择的加密算法(在您的情况下为 AES)应该是所需要的。你总是可以自己编写代码,但我会做一些搜索,看看 API 中是否有对它的原生支持(我假设你也会这样做)。

标签: winapi cryptoapi


【解决方案1】:

.NET 库在 System.Security.Cryptography 命名空间中提供 PasswordDeriveBytes 正是为此目的。看起来 CryptDeriveKey 是 WinCrypt API 等价物。是的,您可以让您的用户选择他们自己的密码,然后让这个函数在计算加密函数的实际密钥字节数时花费数微秒。您的最终用户永远不会错过这几微秒,但一个暴力破解黑客会因为速度慢到每秒尝试 100 万个密码而不是 10 亿个密码而痛恨它,这是理所当然的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-28
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多