Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在数据库中存储哈希密码_C#_Sql_Hash_Passwords_Sha1 - Fatal编程技术网

C# 如何在数据库中存储哈希密码

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

我正在尝试将哈希密码存储在sql express数据库中。但我不能做到这一点。 这是我的密码:

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