2016-06-26 4 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 

を使用してこのストアドプロシージャを使用します私はこのコードを使ってデータを呼び出し、プログラムにログインします。

   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要素認証を使用し、すべてのサーバー管理者を適切に管理します。

0

あなたの[DBO] [SLE]ストアドプロシージャでは、あなたは別に問題から

SET @ins = EncryptByPassPhrase('8', @ins) 
関連する問題