简单的ASP.NET密码哈希类烦恼

时间:2013-11-13 21:07:23

标签: c# asp.net hash passwords salt

我正在尝试将一些安全性应用到我正在完成大学的项目中。这种安全性有点瞥看,所以我很想放弃,将密码保存为明文或转换为base64,并做一些更明显的用户。

在我放弃之前,我问的是。这是我第一次尝试在这里问任何事情,所以请保持温和。

我决定实现这个MSDN代码不会太难。 http://msdn.microsoft.com/en-us/library/aa545602%28v=cs.70%29.aspx

原来,确实如此。我收到了错误

  

System.FormatException:输入字符串的格式不正确。

代码

binarySaltValue[0] = byte.Parse( salt.Substring( 0, 2 ), System.Globalization.NumberStyles.HexNumber, CultureInfo.InvariantCulture.NumberFormat );

我说实话,我不完全理解这段代码。

  1. 什么是SaltValueSize应该是什么?提供的代码不提供它,也没有提供任何参考。它也是大写的,它也是一个对象吗?或某处某个物体的某个地方?
  2. 变量“hash”没有在任何地方定义,所以我只用新的MD5CryptoServiceProvider()填充它。这是一个错误吗?
  3. 如果我正确读取它,字符串“salt”应该保存二进制,但它不会在运行时出现乱码文本,同时所有崩溃的行都试图从“salt”解析二进制文件?为什么?
  4. 如果有人能解决这个问题或提供一个防止白痴的异步散列类,我会很感激。

    (为我的随机用户名道歉,我不知道是怎么回事)

1 个答案:

答案 0 :(得分:1)

这是一个基本的方法(没有盐),至少可以帮助你入门。它只是“哈希”进入的字符串。

    private string GetHashedString(string _PW)
    {
        string _HashedPW = "";
        SHA512 sha = new SHA512CryptoServiceProvider();
        byte[] result;
        StringBuilder strBuilder = new StringBuilder();


        sha.ComputeHash(ASCIIEncoding.ASCII.GetBytes(_PW));
        result = sha.Hash;

        for (int i = 0; i < result.Length; i++)
        {
            strBuilder.Append(result[i].ToString("x2"));
        }

        _HashedPW = strBuilder.ToString();
        return _HashedPW;
    }