2014-03-31 51 views
1

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

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

+1

你问WinCrypt是否支持PBE(基于密码的加密)?我问,因为你显然混淆了AES对称密钥(128,192或256位,取决于选择的算法),用户提供的密码(可能是任何东西)。这种PBE通常使用摘要算法,通过昂贵(故意)的迭代次数将用户密钥转换为对称算法密钥,并且有标准算法可以实现这一点。 – WhozCraig

+0

@WhozCraig:看来我需要PBE,是的。我可以使用WinCrypt API吗? – fogbit

+0

我从来没有使用过WinCrypt来执行PBE,但如果他们不支持某种程度或者其他方面,我会感到震惊。一个[*密钥派生函数*](http://tools.ietf.org/html/rfc2898)以及适当的摘要算法和选择加密算法(在你的情况下,AES)应该是所有需要的。你可以自己编写代码,但我会做一些搜索,看看API中是否有原生支持(我假设你也会这样做)。 – WhozCraig

回答

1

.NET库为此提供了System.Security.Cryptography命名空间中的PasswordDeriveBytes。它看起来像CryptDeriveKey是WinCrypt API的等价物。是的,你可以让你的用户选择他们自己的密码,然后让这个函数咀嚼几微秒,计算密码函数的实际密钥字节。您的最终用户绝不会错过那几微秒,但是一个蛮力黑客被放缓尝试每秒100万个密码而不是10亿个密码会令人讨厌,这是应该的。

相关问题