我有一个 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 关注
- 317 浏览
添加回答
举报
0/150
提交
取消