C#SHA512 /公共静态字符串

Nic*_*cai -1 c# string cryptography visual-studio-2010

今天一个恼人的问题,我应该知道这一点,但对于我的生活,我无法弄明白.我在查询sql数据库之前尝试哈希密码.我的哈希码工作正常,但它在公共静态字符串中:

     public static string GetCrypt(string text)
    {
        string hash = "";
        SHA512 alg = SHA512.Create();
        byte[] result = alg.ComputeHash(Encoding.UTF8.GetBytes(text));
        hash = Encoding.UTF8.GetString(result);
        return hash;
    }
Run Code Online (Sandbox Code Playgroud)

我有两个问题,一个..一旦它被哈希,我如何获得该结果,因为当我尝试访问变量"哈希"时,它给出了当前上下文中不存在的错误.我怀疑这是由于公共和私人课程?

另外,我的另一个问题是,为了拥有一个更有效的程序,我或者已经是这样的代码,通过我输入一次,然后可以调用它来回传递变量.有点像,输入密码,哈希,然后传回来..然后在另一个文本框中将新变量传递给相同的哈希码并获得新的哈希变量?

先谢谢你们!

cdh*_*wie 5

要使用此方法,您将存储返回值,如下所示:

string hashedString = GetCrypt(inputString);
Run Code Online (Sandbox Code Playgroud)

然后hashedString酌情使用.

但是,你有一些问题:

  • 结果alg.ComputeHash()不是UTF-8编码的字符串,因此Encoding.UTF8.GetString()极有可能抛出异常,甚至不会做你想要的.考虑使用Convert.ToBase64String()(或将字节数组转换为十六进制字符串).
  • 您不会对输入字符串加盐,至少不在此方法中.这意味着您的密码数据库容易受到彩虹表攻击.考虑使用salted哈希或(更好)一种专门用于散列密码的算法设计,例如bcrypt,scryptPBKDF2,它们内置于框架本身.