C#SHA512 /公共静态字符串

时间:2013-08-19 15:02:38

标签: c# string visual-studio-2010 cryptography

今天一个恼人的问题,我应该知道这一点,但对于我的生活,我无法理解。我在查询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;
    }

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

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

先谢谢你们!

1 个答案:

答案 0 :(得分:5)

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

string hashedString = GetCrypt(inputString);

然后根据需要使用hashedString

但是,你有一些问题:

  • alg.ComputeHash()的结果不是UTF-8编码的字符串,因此Encoding.UTF8.GetString()很可能会抛出异常,甚至不会执行您想要的操作。考虑使用Convert.ToBase64String()(或convert the byte array to a hex string)。
  • 您不会对输入字符串加盐,至少不在此方法中。这意味着您的密码数据库容易受到rainbow table攻击。考虑使用salted哈希或(更好)一种专门用于散列密码的算法设计,例如内置于框架bcryptscryptPBKDF2itself