C# 如何在数据库中存储哈希密码
我正在尝试将哈希密码存储在sql express数据库中。但我不能做到这一点。 这是我的密码:C# 如何在数据库中存储哈希密码,c#,sql,hash,passwords,sha1,C#,Sql,Hash,Passwords,Sha1,我正在尝试将哈希密码存储在sql express数据库中。但我不能做到这一点。 这是我的密码: SHA1CryptoServiceProvider sha = new SHA1CryptoServiceProvider(); byte[] encode = sha.ComputeHash(Encoding.ASCII.GetBytes(pass)); string cmd = "insert into tblLogin (username,password,email,state,activ
SHA1CryptoServiceProvider sha = new SHA1CryptoServiceProvider();
byte[] encode = sha.ComputeHash(Encoding.ASCII.GetBytes(pass));
string cmd = "insert into tblLogin (username,password,email,state,active) values ('"+name+"',"+encode+",'"+email+"','"+state +"',"+ active + ")" ;
在数据库中,我将密码保存为varbinary
var provider = new SHA1CryptoServiceProvider(salt);
byte[] bytes = Encoding.UTF8.GetBytes(input);
string result = Convert.ToBase64String(provider.ComputeHash(bytes)); // store it
这里我的问题是我得到的是编码为System.Byte[]的值,而不是散列值。
我如何做到这一点,我试图找到,我得到了如何散列密码,而不是如何存储密码
这里我的主要问题是如何构造Insert查询并将字节[]存储到数据库中?将其另存为varchar,而不是varbinary。将其另存为varchar,而不是varbinary。阅读此内容,您需要转换值。。。密码也应该加盐。事实上,为什么不直接使用
System.Web.Helpers.Crypto.HashPassword(password)
,它会自动对密码进行加密并使其具有强大的加密功能?@MystereMan:我很乐意这样做,但之后如何将其与用户输入的密码进行比较,或者在密码恢复时检索密码?我试图这样做,但找不到…Helpers命名空间。@user1782698-您无法恢复哈希密码。他们是单向的。这就是散列的要点。(如果您注意到还有一个VerifyHashedPassword函数)是。这就是为什么合适的网站从来没有像这样的密码恢复-他们可以为你生成一个新的密码,但永远不会恢复旧的密码。阅读此文,你需要转换值。。。密码也应该加盐。事实上,为什么不直接使用System.Web.Helpers.Crypto.HashPassword(password)
,它会自动对密码进行加密并使其具有强大的加密功能?@MystereMan:我很乐意这样做,但之后如何将其与用户输入的密码进行比较,或者在密码恢复时检索密码?我试图这样做,但找不到…Helpers命名空间。@user1782698-您无法恢复哈希密码。他们是单向的。这就是散列的要点。(如果您注意到还有一个VerifyHashedPassword函数)是。这就是为什么合适的站点从来没有像这样的密码恢复功能——它们可以为您生成新密码,但永远不会恢复旧密码。到目前为止,我不关心数据类型,而是关心给我值系统的“encode”变量。Byte[]而不是散列输出。@Pranav-nvarchar
是多字节的。SHA1是单字节。@TheSmose-我尝试过你们的方式,但它以2 abc系统的形式存储在数据库中。字节[]a@b.com表现真实。它是预期的输出吗?到目前为止,我不关心数据类型,但我关心的是“encode”变量,它给我的是值系统。字节[],而不是散列输出。@Pranav-nvarchar
是多字节的。SHA1是单字节。@TheSmose-我尝试过你们的方式,但它以2 abc系统的形式存储在数据库中。字节[]a@b.com表现真实。它是预期输出吗??
var provider = new SHA1CryptoServiceProvider(salt);
byte[] bytes = Encoding.UTF8.GetBytes(input);
string result = Convert.ToBase64String(provider.ComputeHash(bytes)); // store it