我才知道密码的存储哈希值是从Preferred Method of Storing Passwords In Database一个安全的一个...
如何盐和使用C#哈希密码值?
如何比较存储在数据库中的值和用户给出的值?
我才知道密码的存储哈希值是从Preferred Method of Storing Passwords In Database一个安全的一个...
如何盐和使用C#哈希密码值?
如何比较存储在数据库中的值和用户给出的值?
最流行的方式做到这一点。有关如何使用MD5算法对字符串进行散列的优秀blog post here,但System.Cryptography
名称空间中还有许多其他示例。使用指定的算法
至于#2,一般的一步一步的指导,如何做到这一点的工作将是以下几点:
在登记并将其存储在数据库中
在登录/用户&口令检查:
这一切都比较啰嗦,但它是非常安全的。
还有另一个非常深入的哈希指南和腌制here。
附加信息:有几个版本的登录和注册过程http://stackoverflow.com/questions/1471654/reversing-an-md5-hash/1471668#1471668 – 2010-01-05 09:36:59
盐是一个额外的输入到散列过程正常,但在其他方面良好的,明确的解释:在以下SO问题概述。 +1 – 2010-01-05 10:00:48
请帮我在这个问题http://stackoverflow.com/questions/2863034/sql-serverwhat-data-type-to-use-for-password-salt-and-hash-values-and-what-楞 – 2010-05-19 06:16:06
的哈希,你有几个System.Security.Cryptography支持的算法,为你的用例,你可能想选择一个SHA基于散列或类似的东西。
关于比较:您不会比较DB值和用户给您的值。您首先使用用于将密码存储在数据库中的相同加密/散列函数,这次是用户输入。如果结果等于数据库中的散列,则密码(可能)是正确的。
其意图是没有人可以访问数据库可以以明文形式检索密码,甚至连程序都不需要知道它(只有接受用户输入的部分才会有短时间) 。
链接(甚至重复):
严格地说,你应该salt the password再散列它,以避免字典攻击。您可以使用System.Cryptography
名称空间中的HashAlgorithm
抽象类的任何实现来计算散列 - 当前最佳选择可能是SHA-2 algorithms之一。
您存储散列而不是密码,并比较散列值以验证用户。
@大卫任何例子 – 2010-01-05 09:32:05
像其他人所说的,有很多选择。
下面是一些示例代码Microsoft(使用而不是SHA MD5),这可能有助于让你得到的是使用散列算法开始
using System;
using System.Security.Cryptography;
using System.Text;
string sSourceData;
byte[] tmpSource;
byte[] tmpHash;
sSourceData = "MySourceData";
//Create a byte array from source data.
tmpSource = ASCIIEncoding.ASCII.GetBytes(sSourceData);
//Compute hash based on source data.
tmpHash = new MD5CryptoServiceProvider().ComputeHash(tmpSource);
简单的哈希:
public string GetSHA256Hash(string s)
{
if (string.IsNullOrEmpty(s))
{
throw new ArgumentException("An empty string value cannot be hashed.");
}
Byte[] data = System.Text.Encoding.UTF8.GetBytes(s);
Byte[] hash = new SHA256CryptoServiceProvider().ComputeHash(data);
return Convert.ToBase64String(hash);
}
这里是这一个lib:http://encrypto.codeplex.com/ – Omu 2010-09-14 08:37:48