2017-04-23 1 views
0

私はSHA256を使用してパスワードをハッシュしました。私は毎回ランダムな塩生成器を生成しましたが、毎回ランダムな塩を生成し、これをパスワードに加えて暗号化してデータベースに格納します。今私はユーザーを認証しようとしていますが、私はどのようにそれを行うかわかりません。ここで私はやっているものです:asp.netを使用してMysqlでSHA256を使用するユーザーを認証します

public static String ByteArrayToHexString(byte[] ba) 
    { 
     System.Text.StringBuilder hex = new StringBuilder(ba.Length * 2); 
     foreach (byte b in ba) 
     { 
      hex.AppendFormat("{0:x2}", b); 
     } 
     return hex.ToString(); 
    } 

    public String CreateSalt(int size) // Function to generate a random salt 
    { 
     var rng = new System.Security.Cryptography.RNGCryptoServiceProvider(); 
     var buff = new byte[size]; 
     rng.GetBytes(buff); 
     return Convert.ToBase64String(buff); 
    } 

    public String GenerateSHA256Hash(String input, String salt) // Function to add user input and randomly generated salt 
    { 
     byte[] bytes = System.Text.Encoding.UTF8.GetBytes(input + salt); 
     System.Security.Cryptography.SHA256Managed sha256hashstring = new System.Security.Cryptography.SHA256Managed(); 
     byte[] hash = sha256hashstring.ComputeHash(bytes); 
     return ByteArrayToHexString(hash); 
    } 

私は正常に保存することができますが、今どのように私はユーザーを認証することができますか? ありがとうございました... !!! :)

+0

SHA256は、これに使用する間違った機能です。 [私たちのパスワードハッシングには服がありません](https://www.troyhunt.com/our-password-hashing-has-no-clothes/)を参照してください。トップ10の開発者の暗号ミスのリストにある[number 4](https://littlemaninmyhead.wordpress.com/2017/04/22/top-10-developer-crypto-mistakes/)も参照してください。 – TheGreatContini

答えて

1

ユーザーを認証するには、ユーザーレコードで塩を保存する必要があります。あなたはではなく、は塩を暗号化する必要があります。

誰かがログインしようとすると、そのユーザーの塩とハッシュの両方を取得します。 saltを使用して試行されたパスワードをハッシュし、この新しいハッシュをユーザー用に保存したハッシュと比較します。オリジナルと同じ方法で同じソルトを同じ入力に組み合わせ、同じハッシュアルゴリズムを使用すると、同じハッシュになります。したがって、ハッシュを比較してユーザーを認証できます。

私はこのコードを書くのを避けるよう強くお勧めします。 — — —悪意のある試行を残しているようですが、—が微妙に間違っていますが、1年後に戻ってきて、6人がハッキングされていることがわかります数か月前。

代わりに、お使いのプラットフォームに提供されているソリューションにできる限り依存してください。 availalbeが1つもない場合は、既存のライブラリを探します。セキュリティと認証コードは、専門家に任せておきたいことです。

+0

あなたはこれについてもっと詳しく教えてもらえますか?私はあなたに例を示すことができますか?ユーザーが入力したユーザー名とパスワードを取り出しました。データベースから塩を取り出して、ユーザーが入力したパスワードに追加することができますが、私はそうすることができません。 – Deep

0
  1. 暗号化されていないパスワードをハッシュしました。
  2. また、塩をいくつかの場所に保存する必要があります。そうでなければ、あなたは認証できません。その後

、ユーザーが自分のパスを送信するときに、ユーザーパス+塩は以前に保存されているように、同じハッシュを返すかどうかを確認するために、同じ機能GenerateSHA256Hash()を使用することができます。

+0

しかし、私はデータベースから塩分を取り出す必要があります。私は正常にフェッチすることができません:( – Deep

+0

SHA256はこれに使用する間違った機能です。[私たちのパスワードハッシュには服がありません](https://www.troyhunt .com/our-password-hashing-have-no-clothes /)。 – TheGreatContini

関連する問題