C# 将数据库和用户输入中的加密密码与Encrypto进行比较

C# 将数据库和用户输入中的加密密码与Encrypto进行比较,c#,linq,linq-to-sql,encryption,codeplex,C#,Linq,Linq To Sql,Encryption,Codeplex,如何比较从用户输入插入数据库的加密密码?我注意到,当我测试我的程序时,我创建了一个帐户,他们都有相同的密码,但他们有不同的加密,我怎么知道用户的输入是否与数据库中的输入相同?Encrypto是这样做的吗?或者Encrypto有一种独特的方式来确定哪个是哪个 我在这段代码中使用的是Encrypto吗 var hasher = new Hasher(); hasher.SaltSize = 16; //Encrypts The password var encryptedPassword = h

如何比较从用户输入插入数据库的加密密码?我注意到,当我测试我的程序时,我创建了一个帐户,他们都有相同的密码,但他们有不同的加密,我怎么知道用户的输入是否与数据库中的输入相同?Encrypto是这样做的吗?或者Encrypto有一种独特的方式来确定哪个是哪个

我在这段代码中使用的是Encrypto吗

var hasher = new Hasher();

hasher.SaltSize = 16;

//Encrypts The password
var encryptedPassword = hasher.Encrypt(txtPass.Text);

Account newUser = new Account();

System.Text.UTF8Encoding encoding=new System.Text.UTF8Encoding();

newUser.accnt_User = txtUser.Text;
newUser.accnt_Position = txtPosition.Text;
newUser.accnt_Pass = new System.Data.Linq.Binary(encoding.GetBytes(encryptedPassword));

我并不特别了解Encrypto,但一般的原则是:先“加密”密码,然后对其进行加密,并将其存储到数据库中。当有人登录时,您会重复同样的操作:salt、encrypt,然后与存储在数据库中的另一个散列进行比较

两个相同的密码可能产生不同的哈希值的原因是salt;在加密密码之前,您需要修改密码,因此查看散列只会使您更难理解散列机制。salt可以始终是相同的(安全性差)、用户名的函数或与加密密码一起存储在数据库中的另一个随机字符串的函数


同样,我不知道Encrypto,但只要使用与您要与用户输入密码进行比较时在数据库中生成哈希相同的逻辑即可。

两个相同的密码可能会产生不同的哈希,因为Encrypto在对密码进行哈希之前会在密码的末尾添加随机盐

在codeplex上,查看以了解他们是如何做到这一点的。他们基本上用盐做散列,然后把盐加到散列的末尾。这是存储在数据库中的内容

当用户设置密码或新用户注册时,您可以对密码进行哈希运算并将其存储在数据库中

var hasher = new Hasher();
hasher.SaltSize = 16;
var hashedPasswordToStoreInDB = hasher.Encrypt(passwordToSet);
稍后,当他们登录并输入密码时,您会将用户键入的密码与以前从DB检索到的哈希版本进行比较,如下所示

var hasher = new Hasher();
hasher.SaltSize = 16;
bool areEqual = hasher.CompareStringToHash(enteredPassword, hashFromDatabase);

同样,如果您(
Hasher.CompareStringToHash
),您将看到随机salt从存储的散列中恢复,然后用于根据输入的密码计算新的散列。

它做了您想要的吗?我看不出你在哪里指明了你使用的是哪种加密,更不用说生成密钥和salt了。你知道加密密码是不安全的,对吗?我正在使用这个来看看你设置的salt大小,但是值呢?每个帐户应使用唯一的salt值,以便具有相同密码的两个用户具有不同的加密值。您需要为每个帐户保存salt,或者能够重新驱动salt,例如从用户名和其他数据中。@Ramhound:Encrypto使用哈希,而不是可逆加密。它是安全的;我会把var enryptedPassword放入数据库吗?然后,如果我想登录,我将检索它,然后使用bool areEqual=hasher.CompareStringToHash(enterePassword,queryResult)?