如何使用 Salt 创建 SHA256 哈希?

Dav*_*vid 8 c# hash comparison

我目前正在开发一个 Visual Studio C# windows 窗体项目。但是,我对 SHA256 + salted 的工作方式感到困惑。我在网上找到了一些示例,但无法理解如何调用此函数。

我想在连接到数据库(Microsoft Access 2010)的登录表单中调用此函数。

  • 如何通过单击按钮并从 读取密码来调用此函数Textbox?
  • 如何在Messagebox.Show方法中显示哈希值 ?(为了我的测试目的)
  • 是否可以比较两个文本(散列和加盐)并给出肯定的结果?

    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;
    }
    
    Run Code Online (Sandbox Code Playgroud)

如何使用盐创建 SHA256 哈希?

shavalue = (sha256encrypt("password", "username");
saltedandhashtext = CreateSalt(shavalue);
Run Code Online (Sandbox Code Playgroud)

jAC*_*jAC 2

第一个问题请看CC Inc的回答。

到第二点: MessageBox.Show(sha256encrypt(textBox1.Text, "SampleUserName"));

3)是的,是的。

您可以使用==比较器 或来比较两个字符串string.Equals()。

public bool compareHashs(string hash1, string hash2){
   if(hash1.Equals(hash2) //or hash1 == hash2
      return true;
   }else{
      return false;
   }  
}
Run Code Online (Sandbox Code Playgroud)