我需要创建一个PBKDF2-SHA256密码哈希,但遇到了一些麻烦。如何在C#/ Bouncy Castle中创建PBKDF2-SHA256密码哈希
我下载了Bouncy Castle回购协议,但在单元测试中找到了我要找的东西,有点卡住了。
找到一些示例代码here,但这只是做SHA1。代码的关键位是:
/// <summary>
/// Computes the PBKDF2-SHA1 hash of a password.
/// </summary>
/// <param name="password">The password to hash.</param>
/// <param name="salt">The salt.</param>
/// <param name="iterations">The PBKDF2 iteration count.</param>
/// <param name="outputBytes">The length of the hash to generate, in bytes.</param>
/// <returns>A hash of the password.</returns>
private static byte[] PBKDF2(string password, byte[] salt, int iterations, int outputBytes)
{
var pdb = new Pkcs5S2ParametersGenerator();
pdb.Init(PbeParametersGenerator.Pkcs5PasswordToBytes(password.ToCharArray()), salt,
iterations);
var key = (KeyParameter)pdb.GenerateDerivedMacParameters(outputBytes * 8);
return key.GetKey();
}
我需要将此从SHA1更改为SHA256。
从Java文档和this post,它看起来像下面是可能的,但在C#库中的构造函数没有超载。
var pdb = new Pkcs5S2ParametersGenerator(new Sha256Derived());
查找有关堆栈溢出another article,我认为以下是可能的,但SHA哈希算法并不在查找列表,所以下面将无法正常工作。
var bcparam = (KeyParameter)pdb.GenerateDerivedParameters("sha256", outputBytes * 8);
我需要做些什么才能使这个工作?
注意:如果您阅读了这篇文章,但不知道如何在Bouncy Castle,但是确实知道另一种方式,我仍然感谢您的帮助。
的源代码是供用户修改。为什么不这样做? –
@JamesKPolk - 一个有效的评论。原因是:A.因为我对B和B的理解都不太理解。我认为在任何情况下,以任何方式来滚动你自己都是一种严肃的禁忌。但是,也许这只是篡改设置它可能是好的。我认为必须有一种方法,但也许C#BouncyCastle落后于Java版本,它只是不包括在内?如果真的没有办法在C#中做到这一点,那么我可能会尝试拉请求并根据Java版本更新代码。我真的宁愿有可用的东西,我可以使用。 – HockeyJ