猿问

HashAlgorithm.Create 在 C# ASP.NET Core 2

我有一个 ASP.Net MVC 项目,它在使用时运行良好HashAlgorithm,但我试图在 ASP.NET Core 2 中复制这个相同的项目,但出现以下错误:


System.PlatformNotSupportedException HResult=0x80131539 消息=此平台不支持操作。Source=System.Security.Cryptography.Primitives StackTrace:在 System.Security.Cryptography.HashAlgorithm.Create(String hashName) 在 Hash.Program.EncodePassword(String pass, String salt)


我的代码:


public static string GeneratePassword(int saltlength) //length of salt

{

    const string chars = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789";

    var randNum = new Random();

    var passwordSalt = new char[saltlength];


    for (var i = 0; i <= saltlength - 1; i++) {

        passwordSalt[i] = chars[Convert.ToInt32((chars.Length) * randNum.NextDouble())];

    }

    return new string(passwordSalt);

}

public static string EncodePassword(string pass, string salt) //encrypt password

{

    byte[] bytes = Encoding.Unicode.GetBytes(pass);

    byte[] src = Encoding.Unicode.GetBytes(salt);

    byte[] dst = new byte[src.Length + bytes.Length];

    Buffer.BlockCopy(src, 0, dst, 0, src.Length);

    Buffer.BlockCopy(bytes, 0, dst, src.Length, bytes.Length);

    HashAlgorithm algorithm = HashAlgorithm.Create("MD5");

    if (algorithm != null) {

        byte[] inArray = algorithm.ComputeHash(dst);

        var encodedPassword = Convert.ToBase64String(inArray);

        return encodedPassword;

    }

    return pass;

}

有关如何修复此错误的任何建议?


梦里花落0921
浏览 318回答 3
3回答

慕哥9229398

此问题有一个github 问题,它提供了一种解决方法:解决方法是调用&nbsp;(HashAlgorithm)CryptoConfig.CreateFromName(string),但通常不鼓励直接调用 CryptoConfig。

哈士奇WWW

要创建 MD5 哈希对象,请使用MD5.Create().&nbsp;使用 CryptoConfig 或HashAlgorithm.Create(String)处理动态需求的唯一原因。

回首忆惘然

正如其他答案中所指出的那样,使用 MD5 作为密码的散列算法并不是一个好主意,因为它太容易破解了。虽然说 MD5 通常不安全并不完全正确,但它对于密码散列是不安全的。基本上是一个简单的散列问题,比如运行一次迭代太便宜了。这就是为什么命名Key Derivation Function用于此目的的原因。这个想法是您需要一个 CPU 密集型算法(具有多次迭代)来进行散列。虽然它对一个用户来说是相当透明的(比如 100 毫秒),但破解它的成本太高了。.Net 已经内置了Rfc2898DerivedBytes。它不是最容易使用的类,所以我在这个类的基础上做了一个小库:SimpleHashing.Net。如果需要 .Net Standard,您可以直接使用它或仅使用代码。还没有时间将其编译为标准。
随时随地看视频慕课网APP

相关分类

Go
我要回答