我如何用盐创建SHA256哈希
本文关键字:SHA256 哈希 创建 何用盐 | 更新日期: 2023-09-27 17:50:32
我目前正在visual studio c# windows窗体项目上工作。然而,我对SHA256 +盐渍是如何工作的感到困惑。我在网上找到了一些例子,但无法理解如何调用这个函数。
我想在连接到数据库(Microsoft Access 2010)的登录表单中调用此函数。
- 我如何通过点击一个按钮来调用这个函数并读取密码从
Textbox
? - 如何在a中显示哈希值
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; }
如何创建带盐的SHA256哈希?
shavalue = (sha256encrypt("password", "username");
saltedandhashtext = CreateSalt(shavalue);
您要做的是,在点击按钮时,将文本框值和用户名传递给sha256encrypt
函数,例如:
private void button1_Click(object sender, EventArgs e)
{
sha256encrypt(textBox1.Text, "SampleUserName");
}
对于第二个问题,执行相同的操作,但使用Messagebox。显示:
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(sha256encrypt(textBox1.Text, "SampleUserName"));
}
第三点:我不确定你的意思,但是如果你想对文本进行Salt处理,并将其与散列后的文本进行比较:
if(sha256encrypt("password", "username") == CreateSalt("password"))
return true;
else
return false;
或者如果你想手动比较它们:
MessageBox.Show(sha256encrypt("password", "username") + "'n'r" + CreateSalt("password"));
关于第一个问题,请看CC公司的回答。
到第二点:MessageBox.Show(sha256encrypt(textBox1.Text, "SampleUserName"));
是的,它是。
可以用==
比较器或string.Equals()
比较两个字符串。
public bool compareHashs(string hash1, string hash2){
if(hash1.Equals(hash2) //or hash1 == hash2
return true;
}else{
return false;
}
}
public string ComputeSHA256Hash(string rawData)
{
// Create a SHA256
using (SHA256 sha256Hash = SHA256.Create())
{
// ComputeHash - returns byte array
byte[] bytes = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(rawData));
// Convert byte array to a string
StringBuilder builder = new StringBuilder();
for (int i = 0; i < bytes.Length; i++)
{
builder.Append(bytes[i].ToString("x2"));
}
return builder.ToString();
}
}