C#中使用Hash+Salt

2018/05/21 243

什么是Hash

Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。
在软件编程中,我们常用的Hash是:MD5 SHA1 SHA256等等,进行签名加密。

特性

  1. 通过计算后,它的Hash的长度是固定的。
  2. 正向计算快速,逆向计算困难。

理论上不可能逆向计算,但是在不加salt时,很容易推测出来。
因为加密后的结果是永恒不变的,所以有网站专门存储着他们的对应关系,能够快速的反查。

请加Salt

2008年,卡内基梅隆大学的软件工程研究所通过美国政府资助的漏洞警报系统向安全专业人员发出公共警告:MD5应被视为已被破解的加密方式,不适合继续使用。

public static string HMACSHA1(string key, string text)
{
    byte[] keyByte = Encoding.UTF8.GetBytes(key);
    byte[] messageBytes = Encoding.UTF8.GetBytes(text);
    using (var hmacSha1 = new HMACSHA1(keyByte))
    {
        byte[] hashmessage = hmacSha1.ComputeHash(messageBytes);
        return BitConverter.ToString(hashmessage).Replace("-", "").ToLower();
    }
}

上述例子是关于HMAC-Sha1的运算,关于Md5版本的可以类推

评论