-1

今天一个烦人的问题,我应该知道这一点,但对于我的生活,我无法弄清楚。我正在尝试在查询 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;
    }

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

另外,我的另一个问题是,要拥有一个更有效的程序,我是否可以或是否已经是我输入一次的代码,然后可以调用它来回传递变量。有点像,输入密码,它散列,然后将其传回..然后在另一个文本框中将新变量传递给相同的散列码并返回新的散列变量?

提前谢谢各位!

4

1 回答 1

5

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

string hashedString = GetCrypt(inputString);

然后hashedString酌情使用。

但是,您有一些问题:

  • 结果alg.ComputeHash()不是 UTF-8 编码的字符串,所以Encoding.UTF8.GetString()很可能抛出异常,甚至不会做你想做的事。考虑使用Convert.ToBase64String()(或将字节数组转换为十六进制字符串)。
  • 您不会对输入字符串加盐,至少在此方法中不会。这意味着您的密码数据库容易受到彩虹表攻击。考虑使用加盐哈希或(更好)专门用于哈希密码的算法设计,例如内置于框架本身的bcryptscryptPBKDF2
于 2013-08-19T15:24:34.260 回答