我有一個 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 回答

哈士奇WWW
TA貢獻1799條經驗 獲得超6個贊
要創建 MD5 哈希對象,請使用MD5.Create()
. 使用 CryptoConfig 或HashAlgorithm.Create(String)
處理動態需求的唯一原因。

回首憶惘然
TA貢獻1847條經驗 獲得超11個贊
正如其他答案中所指出的那樣,使用 MD5 作為密碼的散列算法并不是一個好主意,因為它太容易破解了。雖然說 MD5 通常不安全并不完全正確,但它對于密碼散列是不安全的。
基本上是一個簡單的散列問題,比如運行一次迭代太便宜了。這就是為什么命名Key Derivation Function
用于此目的的原因。這個想法是您需要一個 CPU 密集型算法(具有多次迭代)來進行散列。雖然它對一個用戶來說是相當透明的(比如 100 毫秒),但破解它的成本太高了。
.Net 已經內置了Rfc2898DerivedBytes
。它不是最容易使用的類,所以我在這個類的基礎上做了一個小庫:SimpleHashing.Net。
如果需要 .Net Standard,您可以直接使用它或僅使用代碼。還沒有時間將其編譯為標準。
- 3 回答
- 0 關注
- 370 瀏覽
添加回答
舉報
0/150
提交
取消