2012-12-07 80 views
1

我想在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。

这里我的问题是我得到的编码值为System.Byte []但没有哈希值。 我怎么能做到这一点,我试图找到,我得到如何哈希密码,但没有如何存储密码。

这里我的主要问题是如何构建插入查询和存储字节[]到数据库中?

+0

怎么样为nvarchar – Pranav

+0

看了这个,你需要投的价值... http://stackoverflow.com/questions/9067470/sql-query-to-store-text-data-in-a-varbinarymax – Mate

+2

密码也应该被腌制。实际上,为什么不直接使用'System.Web.Helpers.Crypto.HashPassword(password)'来自动加密密码并使其密码强? –

回答

1
var provider = new SHA1CryptoServiceProvider(salt); 
byte[] bytes = Encoding.UTF8.GetBytes(input); 
string result = Convert.ToBase64String(provider.ComputeHash(bytes)); // store it 
3

将其另存为varchar,而不是varbinary。

+0

nvarchar – Pranav

+0

直到现在我不打扰数据类型,但我很烦扰'编码'变量,它给了我值System.Byte []而不是散列输出。 – user1782698

+0

@Pranav - 'nvarchar'是多字节。 SHA1是单字节的。 –

相关问题