2012-12-07 3 views
1

SQL 익스프레스 데이터베이스에 해시 된 암호를 저장하려고합니다. 하지만 나는 그걸 할 수 없다. 다음은 내 코드입니다 :데이터베이스에 해시 된 암호를 저장하는 방법

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로 암호를 유지했다.

여기 내 문제는 Encode 값을 System.Byte []로 가져 왔지만 해시 값이 아닙니다. 어떻게 할 수 있습니까? 찾으려고 시도했지만 비밀번호를 저장하는 방법이 아니라 비밀번호를 해시하는 방법을 익히고 있습니다.

내 주요 문제는 어떻게 쿼리를 삽입하고 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 (암호)'를 사용하지 않는 이유는 무엇입니까? –

답변

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

varbinary가 아닌 varchar로 저장하십시오.

+0

how about nvarchar – Pranav

+0

지금까지 Datatype에 대해 신경 쓰지는 않지만 해시 출력 대신 System.Byte [] 값을 제공하는 'encode'변수에 대해 귀찮습니다. – user1782698

+0

@Pranav -'nvarchar'는 멀티 바이트입니다. SHA1은 1Y이트입니다. –

관련 문제