这是用MD5加密密码的好方法吗?
我之前从未加密过密码,这是我在这篇文章的帮助下想到的。 这篇文章没有包括盐,所以我不得不自己解决:
UTF8Encoding encoder = new UTF8Encoding(); byte[] salt = new byte[8]; new Random().NextBytes(salt); byte[] encodedPassword = encoder.GetBytes(txtPassword.Text); byte[] saltedPassword = new byte[8 + encodedPassword.Length]; System.Buffer.BlockCopy(salt, 0, saltedPassword, 0, 8); System.Buffer.BlockCopy(encodedPassword, 0, saltedPassword, 8, encodedPassword.Length); byte[] encryptedPassword = new MD5CryptoServiceProvider().ComputeHash(saltedPassword); byte[] saltedEncryptedPassword = new byte[8 + encryptedPassword.Length]; System.Buffer.BlockCopy(salt, 0, saltedEncryptedPassword, 0, 8); System.Buffer.BlockCopy(encryptedPassword, 0, saltedEncryptedPassword, 8, encryptedPassword.Length);
saltedEncryptedPassword
存储在数据库中。 正如您可能注意到的那样,在将涉及盐的字节数组连接在一起时遇到了一些麻烦。 我做得对吗,还是有更好的方法? 谢谢。
密码哈希应该很慢 ,而不是快。
哈希越快,攻击者可以通过密码字典运行得越快。
因此,您永远不应该使用像SHA这样的通用哈希来表示密码。
相反,使用scrypt或PBKDF2等经过validation的慢速技术。
我只将salt值和哈希值(不是saltedencryptedPassword)存储在数据库的不同列中,并使用键入的密码重新生成哈希值。 你在C#中找到了类似的答案Hash和salt密码 。 1`
我有时只将GUID作为salt值并在散列之前将其添加到密码中。
MD5不再安全(2004年被中文黑客攻击),你可以用SHA256或SHA512代替。 编辑:然而,这些算法计算速度非常快,因此更容易破解。 @SLaks建议使用scrypt或PBKDF2,因为它们更难计算。 在Rfc2898DeriveBytes下,.NET中有一个内置的PBKDF2实现。
另一点:我不会每次都创建一个新的Random()对象。 如果您在短时间内调用此项,则每次都会生成相同的随机数序列,因为种子值是基于时间的。
不,这不好。 MD5不再好了。 它与自身相撞而不被信任。 你应该使用SHA256。
public string getSHA256(string input) { try { return BitConverter.ToString(SHA256Managed.Create().ComputeHash(Encoding.Default.GetBytes(input))).Replace(“-”, “”).ToLower(); } catch (Exception e) { return string.Empty; } }
我总是使用SHA2-512来记录我的密码。 在我看来,密码永远不应该加密,但总是哈希(无法追溯到原始密码)。
但请不要再使用MD5,现在可以轻松将其翻译回密码。
上述就是C#学习教程:这是用MD5加密密码的好方法吗?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/987323.html