我目前在Visual Studio C#Windows窗体项目中工作。但是,我对SHA256 +盐腌的工作方式感到困惑。我在网上找到了一些示例,但无法理解如何调用此函数。
我想以连接数据库的登录表单(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;
}
如何用salt创建SHA256哈希?
shavalue = (sha256encrypt("password", "username");
saltedandhashtext = CreateSalt(shavalue);
最佳答案
对于第一个问题,请查看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;
}
}
关于c# - 如何用Salt创建SHA256哈希?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14112440/