所以我在visual studio上编写了一个简单的登录注册Windows应用程序,因为我想再次开始学习C# 我有这个注册页面有几个字段,代码很简单,我没有做任何与验证有关的事情。 我基本上试图在c#中使用SHA1散列密码并在另一个文本框中输出,但我得到了一些未知字符
这是我的代码
private void button1_Click(object sender, EventArgs e)
{
if (username.Text.Trim()=="" || password.Text=="" || passwordc.Text=="" || fname.Text == "" || lname.Text == "" || birthday.Text == "")
{
MessageBox.Show("Please fill all the fields!");
}
else if (password.Text!=passwordc.Text) {
MessageBox.Show("Passwords don't match !");
}
else
{
String passwd="";
passwd = password.Text;
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(passwd);
SHA1 sha = new SHA1CryptoServiceProvider();
byte[] passbyte = sha.ComputeHash(bytes);
string pass = System.Text.Encoding.UTF8.GetString(passbyte);
textBox1.Text = pass;
}
https://i.stack.imgur.com/SOPit.png
有什么不对或这是正常的哈希吗?我现在有点困惑。
由于
答案 0 :(得分:0)
哈希只是一堆字节。他们不是有意义的角色。如果要将哈希值转换为文本格式,可以使用Convert.ToBase64String():
string pass = Convert.ToBase64String(passByte);
另外,请考虑切换到SHA256。随着计算能力的提高,SHA1变得越来越容易破解。一个常见的事情是在存储之前运行散列过程(新散列成为散列的密码)数百或数千次。创建存储哈希的时间差异不会太大,但它会使密码破解的时间延长很多倍。
此外,您还要开始在每个密码中加入随机盐以进行哈希处理。这可以避免彩虹表攻击,并且不会为相同的密码生成相同的哈希值。