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

时间:2017-03-23 17:27:47

标签: c# hash passwords 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

有什么不对或这是正常的哈希吗?我现在有点困惑。

由于

1 个答案:

答案 0 :(得分:0)

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

string pass = Convert.ToBase64String(passByte);

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

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