我有一个Windows应用程序,目标框架是.NET Framework 4.6.1
我使用 C# 来哈希密码。我的代码是
public string HashPassword(string password)
{
byte[] salt = new byte[128 / 8];
using (var rng = new RNGCryptoServiceProvider())
{
rng.GetBytes(salt);
}
string hashed = "";
using (var rfc = new Rfc2898DeriveBytes(password, salt, 100000, HashAlgorithmName.SHA512))
{
//logic implementation
}
}
我收到错误 CS1729 'Rfc2898DeriveBytes' 不包含采用 4 个参数的构造函数。
我右键单击 Rfc2898DeriveBytes,然后转到定义。 在命名空间 System.Security.Cryptography 中,有 '''public Rfc2898DeriveBytes(字符串密码, byte[] salt, int 迭代, HashAlgorithmName hashAlgorithm)''' ''' : this(new UTF8Encoding(encoderShouldEmitUTF8Identifier: false).GetBytes(密码), salt, iterations, hashAlgorithm)'''
那么,为什么我收到错误消息?看来编译器正在寻找其他地方。
谢谢你
正如 Auditive 所说,Rfc2898DeriveBytes(string password, byte[] salt, int iterations, HashAlgorithmName hashAlgorithm) 仅支持 .NET Framework 4.7.2 及更高版本。
另外,为什么在.net Framework 4.7.1中点击“转到定义”后可以找到这个方法,是因为你开启了“启用导航到反编译源”,导致你看到了反编译的代码。
请按照以下步骤操作:
工具=>选项=>文本编辑器=>C#=>高级=>取消选中“启用反编译源导航”
然后去定义后会发现没有Rfc2898DeriveBytes(string password, byte[] salt, int iterations, HashAlgorithmName hashAlgorithm)。