如何比较sql中的加密密码
本文关键字:加密 密码 sql 何比较 比较 | 更新日期: 2023-09-27 18:09:54
我已经加密了我的密码并将其存储在数据库中,但现在我想将加密值与用户在加载页面时键入的密码进行比较。考虑以下代码:
string userName = txtusername.Text;
string password = txtpassword.Text;
Encryptor en = new Encryptor(EncryptionAlgorithm.Rc2, CreateRandomPassword(7));
password = en.Encrypt(password);
DataTable dt = uMManager.ValidateUser(userName, password);
CreateRandomPassword方法private static string CreateRandomPassword(int passwordLength)
{
string allowedChars = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789!@$?_-";
char[] chars = new char[passwordLength];
Random rd = new Random();
for (int i = 0; i < passwordLength; i++)
{
chars[i] = allowedChars[rd.Next(0, allowedChars.Length)];
}
return new string(chars);
}
加密机类
public class Encryptor
{
EncryptEngine engin;
public byte[] IV;
public Encryptor(EncryptionAlgorithm algID, string key)
{
engin = new EncryptEngine(algID, key);
}
public EncryptEngine EncryptEngine
{
get
{
return engin;
}
set
{
engin = value;
}
}
public string Encrypt(string MainString)
{
MemoryStream memory = new MemoryStream();
CryptoStream stream = new CryptoStream(memory, engin.GetCryptTransform(), CryptoStreamMode.Write);
StreamWriter streamwriter = new StreamWriter(stream);
streamwriter.WriteLine(MainString);
streamwriter.Close();
stream.Close();
IV = engin.Vector;
byte[] buffer = memory.ToArray();
memory.Close();
return Convert.ToBase64String(buffer);
}
}
我制作了一个本地方法来生成RC2加密的随机字符串。EncryptionAlgorithm是加密类型的枚举。现在,我如何将'password'与数据库中的密码字段进行比较,以检查凭据是否正确
您无法检查凭证是否正确,因为您已经使用您丢弃的密钥对其进行了加密。如果您将密钥与密码一起存储,那么加密就没有任何意义。如果你不这样做,你就无法验证。
与其尝试创建一种新的方式来存储密码,为什么不使用一种已知有效的方式呢?
不要加密密码。散列。加密允许检索明文密码,这是一件坏事。散列仍然允许您检查用户输入的内容是否与他之前所做的内容匹配。
程序流程如下:
- 当用户注册新帐户->你加密他的密码->保存在数据库
- 当用户登录时->加密输入密码->获取数据库中密码的用户->如果用户不为空->登录成功->否则->登录失败
看起来你每次都在使用一个随机密钥来加密你的密码
第一次加密"test"
,然后加密"test"a第二次。两种加密的结果是不一样的。
你应该简单地使用哈希算法