使用 SHA1 进行密码加密会产生奇怪的输出



所以我在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

有什么问题还是正常的哈希?我现在有点困惑。

谢谢

哈希只是一堆字节。他们不是有意义的角色。如果要将哈希转换为文本形式,可以使用 Convert.ToBase64String((:

string pass = Convert.ToBase64String(passByte);

此外,请考虑切换到 SHA256。随着计算能力的提高,SHA1变得越来越容易破解。一个常见的做法是在存储之前运行哈希过程(新哈希成为哈希密码(数百或数千次。创建要存储的哈希值的时间不会产生太大差异,但它使破解密码花费的时间要长很多倍。

此外,您需要开始在每个密码中加入随机盐以进行哈希处理。这样可以避免彩虹表攻击,并且不会为相同的密码生成相同的哈希。

最新更新