C# 简单的ASP.NET密码哈希类问题

C# 简单的ASP.NET密码哈希类问题,c#,asp.net,hash,passwords,salt,C#,Asp.net,Hash,Passwords,Salt,我正试图对我即将完成的大学项目应用一些安全措施。这种安全性有些粗略,所以我很想放弃,将密码保存为明文或转换为base64,然后做一些用户更明显的事情 在我放弃之前,我要这么做。这是我第一次尝试在这里问任何问题,所以请温柔一点 我决定实现这个MSDN代码不会太难。 事实证明,确实如此。我发现了错误 System.FormatException:输入字符串的格式不正确 代码 binarySaltValue[0] = byte.Parse( salt.Substring( 0, 2 ), Syste

我正试图对我即将完成的大学项目应用一些安全措施。这种安全性有些粗略,所以我很想放弃,将密码保存为明文或转换为base64,然后做一些用户更明显的事情

在我放弃之前,我要这么做。这是我第一次尝试在这里问任何问题,所以请温柔一点

我决定实现这个MSDN代码不会太难。

事实证明,确实如此。我发现了错误

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

代码

binarySaltValue[0] = byte.Parse( salt.Substring( 0, 2 ), System.Globalization.NumberStyles.HexNumber, CultureInfo.InvariantCulture.NumberFormat );
老实说,我不完全理解这个代码

  • SaltValueSize应该是多少?提供的代码不提供它,也不提供任何引用。而且它是资本化的,所以它是一个对象吗?或者某个物体的某个区域
  • 变量“hash”没有在任何地方定义,所以我只是用新的MD5CryptoServiceProvider()填充了它。这是个错误吗
  • 如果我读对了,字符串“salt”应该包含二进制,但在运行时它没有,它有乱码文本,同时所有崩溃的行都试图从“salt”解析二进制?为什么?
  • 如果有人能解决这个问题或提供一个防白痴的异步哈希类,我将不胜感激

    (为我的随机用户名道歉,我不知道这是怎么发生的)

    这里有一个基本方法(不含盐),至少可以让你开始。它只是“散列”输入的字符串

        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;
        }
    
    private string GetHashedString(string\u PW)
    {
    字符串_HashedPW=“”;
    SHA512 sha=新的SHA512CryptoServiceProvider();
    字节[]结果;
    StringBuilder strBuilder=新StringBuilder();
    ComputeHash(ascienceoding.ASCII.GetBytes(_PW));
    结果=sha.Hash;
    for(int i=0;i
    您的特定错误可能是变量
    salt
    包含非数字字符,因此salt的NumberStyle参数(System.Globalization.NumberStyle.HexNumber)格式不正确。您是对的。我为salt实现了一个非常简单的“随机文本”生成器。我在明文的末尾加了一个随机的盐,把它扔进了SHA256(我没有512的空间,但我以后会的)。太棒了很高兴它有帮助!你要如何再次解开它来检查密码?你没有!如果需要检查用户输入的密码是否正确,只需使用用于在用户输入中存储密码的相同加密方法即可。如果两个加密值匹配,则它们输入相同的输入(希望不是“password1234”)。取消散列某人密码的另一个原因是当用户忘记密码时。虽然这在当时是一种正常的做法,但现在你只需验证用户的合法性,并允许他们重置密码——通常通过发送到帐户电子邮件地址的链接。