2016-06-26 2 views
0

사용자가 정보를 입력하여 프로그램에 로그인 할 수있는 경우 응용 프로그램과 함께 작업하고 있습니다. 암호는 테이블에 암호화되어 저장됩니다. 내가이 비밀번호를 사용하여 로그인 할 때 그러나 그것은 작동하지 않습니다. \C# wpf Sql 테이블 암호화 된 암호

데이터를 암호화 내가

ALTER procedure [dbo].[inn] 
    @use varchar (50) = null, 
    @ins varchar (50) = null 

AS 


    INSERT INTO [kole].[dbo].[koll] 
     ([Userr] 
     ,[ins]) 


VALUES 
     (@use, 
     ((EncryptByPassPhrase('8', @ins))) 

가 그리고 decrypte 내가이 저장 프로 시저

ALTER procedure [dbo].[sle] 
@Use varchar (50) = null, 
@ins varchar (50) = null 

AS 
SELECT Userr,CONVERT(varchar(50),DECRYPTBYPASSPHRASE ('8',ins)) as Password 
FROM [kole].[dbo].[koll] 
where Userr = @Use and ins = @ins 

    GO 

을 사용하여이 저장 프로 시저를 사용하여 C#에서는이 코드를 사용하여 데이터를 호출하고 프로그램에 로그인합니다.

   private void btn_Click(object sender, RoutedEventArgs e) 
    { 
     SqlConnection conn = new SqlConnection("Server = localhost;Database = kole; Integrated Security = true"); 

      SqlCommand cmd = new SqlCommand("sle", conn); 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.Parameters.AddWithValue("@Userr", txt.Text); 
      cmd.Parameters.AddWithValue("@ins", psw.Password); 
      conn.Open(); 
      SqlDataAdapter adapt = new SqlDataAdapter(cmd); 
      DataSet ds = new DataSet(); 
      adapt.Fill(ds); 
      conn.Close(); 
      int count = ds.Tables[0].Rows.Count; 

      if (count == 0) 
      { 
       MessageBox.Show("This user don't exist"); 
       SystemSounds.Hand.Play(); 
       txt.Text = ""; 
       psw.Password = ""; 

      } 
      else if (count == 1) 
      { 
       MessageBox.Show("Granted!"); 
       SystemSounds.Asterisk.Play(); 
       conn.Open(); 
    } 

올바른 방법으로 암호를 해독하여 프로그램에 로그인 할 수 있습니까? 감사합니다.

+0

별도로 필요 대신 암호의 해시 고려 DD? – Caramiriel

+0

내가 어떻게 이럴 수있어, 내가 새로운 샘플 인걸 말해 줄 수 있겠 니? – user5827232

+0

나는이 웹 사이트가 왜 당신에게 어떻게 그리고 어떻게 (https://crackstation.net/hashing-security.htm/http : /www.codeproject.com/Articles/608860/Understanding-and-Implementing-Password-Hashing). 즉, 웹 사이트가 어떻게 든 정보를 유출하는 경우 암호를 검색 할 수 없도록하는 것이 좋습니다. – Caramiriel

답변

0

암호를 검색 할 수 있으므로 암호화해서는 안됩니다. 대신 해시되어야하며, 암호 해시는 되돌릴 수없는 단방향 함수입니다. 입력시 암호는 해시되고 해시 된 값은 DB에 입력됩니다. 검증시 검증 할 암호는 DB의 해시 된 값과 동일한 방식으로 해시됩니다.

위의 "해시"는 다음과 같은 의미입니다. 약 100ms 동안 무작위 소금으로 HMAC를 반복합니다 (소금은 해시로 저장해야 함). password_hash, PBKDF2, Bcrypt 및 유사한 기능과 같은 기능을 사용하십시오. 요점은 공격자가 무차별 적으로 암호를 찾는 데 많은 시간을 소비하게하는 것입니다.

OWASP (Open Web Application Security Project) Password Storage Cheat Sheet을 참조하십시오.

일반 대중이 사용하고 사용자가 훌륭한 보안을 기대하는 앱을 가정하면 실제로 보안 도메인 전문가와상의해야합니다. 공격이 끝날 때까지 기다리지 마십시오.

마지막으로 좋은 2 중 인증을 사용하고 모든 서버 관리자를 잘 제어하십시오. . 당신의 [DBO] [소매가] 저장 프로 시저에서

0

, 당신은 문제에서

SET @ins = EncryptByPassPhrase('8', @ins)