C# 找不到 Rfc2898DeriveBytes 包含一个带有 4 个参数的构造函数

问题描述 投票:0回答:1

我有一个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)'''

那么,为什么我收到错误消息?看来编译器正在寻找其他地方。

谢谢你

c# visual-studio hash
1个回答
0
投票

正如 Auditive 所说,Rfc2898DeriveBytes(string password, byte[] salt, int iterations, HashAlgorithmName hashAlgorithm) 仅支持 .NET Framework 4.7.2 及更高版本。

详情请参考:https://learn.microsoft.com/en-us/dotnet/api/system.security.cryptography.rfc2898derivebytes.-ctor?view=net-8.0#system-security-cryptography- rfc2898derivebytes-ctor(system-string-system-byte()-system-int32-system-security-cryptography-hashalgorithmname)

另外,为什么在.net Framework 4.7.1中点击“转到定义”后可以找到这个方法,是因为你开启了“启用导航到反编译源”,导致你看到了反编译的代码。

请按照以下步骤操作:

工具=>选项=>文本编辑器=>C#=>高级=>取消选中“启用反编译源导航”

然后去定义后会发现没有Rfc2898DeriveBytes(string password, byte[] salt, int iterations, HashAlgorithmName hashAlgorithm)。

© www.soinside.com 2019 - 2024. All rights reserved.