8

現在、Visual Studio C# Windows フォーム プロジェクトに取り組んでいます。しかし、SHA256 + salted の仕組みに戸惑っています。オンラインでいくつかの例を見つけましたが、この関数を呼び出す方法を理解できませんでした。

データベース (Microsoft Access 2010) に接続するログイン フォームでこの関数を呼び出したいと思います。

  • ボタンをクリックしてからパスワードを読み取ることで、この関数を呼び出すにはどうすればよいTextboxですか?
  • Messagebox.Showメソッドでハッシュ値を表示するにはどうすればよい ですか? (私のテスト目的のため)
  • 2 つのテキスト (ハッシュとソルト) を比較して肯定的な結果を得ることは可能ですか?

    public static string sha256encrypt(string phrase, string UserName)
    {
        string salt = CreateSalt(UserName);
        string saltAndPwd = String.Concat(phrase, salt);
        UTF8Encoding encoder = new UTF8Encoding();
        SHA256Managed sha256hasher = new SHA256Managed();
        byte[] hashedDataBytes =      sha256hasher.ComputeHash(encoder.GetBytes(saltAndPwd));
        string hashedPwd = String.Concat(byteArrayToString(hashedDataBytes), salt);
        return hashedPwd;
    }
    
    public static string byteArrayToString(byte[] inputArray)
    {
        StringBuilder output = new StringBuilder("");
        for (int i = 0; i < inputArray.Length; i++)
        {
            output.Append(inputArray[i].ToString("X2"));
        }
        return output.ToString();
    }
    
    private static string CreateSalt(string UserName)
    {
        string username = UserName;
        byte[] userBytes; 
        string salt;
        userBytes = ASCIIEncoding.ASCII.GetBytes(username);
        long XORED = 0x00; 
    
        foreach (int x in userBytes)
            XORED = XORED ^ x;
    
        Random rand = new Random(Convert.ToInt32(XORED));
        salt = rand.Next().ToString();
        salt += rand.Next().ToString();
        salt += rand.Next().ToString();
        salt += rand.Next().ToString();
        return salt;
    }
    

ソルトを使用して SHA256 ハッシュを作成するにはどうすればよいですか?

shavalue = (sha256encrypt("password", "username");
saltedandhashtext = CreateSalt(shavalue);
4

3 に答える 3

4

ボタンをクリックして、テキストボックスの値とユーザー名をsha256encrypt関数に渡します。次に例を示します。

    private void button1_Click(object sender, EventArgs e)
    {
        sha256encrypt(textBox1.Text, "SampleUserName");
    }

2 番目の質問については、同じことを行いますが、Messagebox.Show を使用します。

    private void button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show(sha256encrypt(textBox1.Text, "SampleUserName"));
    }

3 番目のポイント: 正確な意味はわかりませんが、テキストをソルトしてハッシュ化されたテキストと比較したい場合は、次のようにします。

if(sha256encrypt("password", "username") == CreateSalt("password"))
   return true;
else
   return false;

または、それらを手動で比較したい場合:

MessageBox.Show(sha256encrypt("password", "username") + "\n\r" + CreateSalt("password"));
于 2013-01-01T17:15:58.023 に答える
2

最初の質問については、CCIncの回答をご覧ください。

2番目のポイントへ: MessageBox.Show(sha256encrypt(textBox1.Text, "SampleUserName"));

3)はい、そうです。

2つの文字列を==コンパレータまたはで比較できstring.Equals()ます。

public bool compareHashs(string hash1, string hash2){
   if(hash1.Equals(hash2) //or hash1 == hash2
      return true;
   }else{
      return false;
   }  
}
于 2013-01-01T17:28:59.033 に答える