亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

HashAlgorithm.Create 在 C# ASP.NET Core 2

HashAlgorithm.Create 在 C# ASP.NET Core 2

Go
夢里花落0921 2021-11-14 10:20:10
我有一個 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;}有關如何修復此錯誤的任何建議?
查看完整描述

3 回答

?
慕哥9229398

TA貢獻1877條經驗 獲得超6個贊

此問題有一個github 問題,它提供了一種解決方法:

解決方法是調用 (HashAlgorithm)CryptoConfig.CreateFromName(string),但通常不鼓勵直接調用 CryptoConfig。


查看完整回答
反對 回復 2021-11-14
?
哈士奇WWW

TA貢獻1799條經驗 獲得超6個贊

要創建 MD5 哈希對象,請使用MD5.Create(). 使用 CryptoConfig 或HashAlgorithm.Create(String)處理動態需求的唯一原因。


查看完整回答
反對 回復 2021-11-14
?
回首憶惘然

TA貢獻1847條經驗 獲得超11個贊

正如其他答案中所指出的那樣,使用 MD5 作為密碼的散列算法并不是一個好主意,因為它太容易破解了。雖然說 MD5 通常不安全并不完全正確,但它對于密碼散列是不安全的。

基本上是一個簡單的散列問題,比如運行一次迭代太便宜了。這就是為什么命名Key Derivation Function用于此目的的原因。這個想法是您需要一個 CPU 密集型算法(具有多次迭代)來進行散列。雖然它對一個用戶來說是相當透明的(比如 100 毫秒),但破解它的成本太高了。

.Net 已經內置了Rfc2898DerivedBytes。它不是最容易使用的類,所以我在這個類的基礎上做了一個小庫:SimpleHashing.Net

如果需要 .Net Standard,您可以直接使用它或僅使用代碼。還沒有時間將其編譯為標準。


查看完整回答
反對 回復 2021-11-14
  • 3 回答
  • 0 關注
  • 370 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號