美文网首页
C#常用加密(SHA..., MD5)--待续

C#常用加密(SHA..., MD5)--待续

作者: 有种境界叫loser | 来源:发表于2019-05-17 18:03 被阅读0次

    SHA1

    1.SHA
    安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。该算法经过加密专家多年来的发展和改进已日益完善,并被广泛使用。该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。散列函数值可以说是对明文的一种“指纹”或是“摘要”所以对散列值的数字签名就可以视为对此明文的数字签名。
    2.SHA1
    SHA-1是一种数据加密算法,该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。

    C# 代码

            /// <summary>
            /// SHA1 加密 
            /// </summary>
            /// <param name="content">需要加密字符串</param>
            /// <param name="encode">指定加密编码</param>
            /// <param name="upperOrLower">大小写格式(大写:X2;小写:x2)默认小写</param> 
            public static string SHA1Encrypt(string content, Encoding encode, string upperOrLower = "x2")
            { 
                try
                {
                    var buffer = encode.GetBytes(content);//用指定编码转为bytes数组
                    var data = SHA1.Create().ComputeHash(buffer);
                    var sb = new StringBuilder();
                    foreach (var t in data)
                    {
                        sb.Append(t.ToString(upperOrLower ));
                    }
    
                    return sb.ToString();
                }
                catch (Exception ex)
                {
                    return "";
                    throw new Exception("SHA1加密出错:" + ex.Message);
                }
            }
    

    SHA256

    /// <summary>
    /// SHA256 加密 
    /// </summary>
    /// <param name="content">需要加密字符串</param>
    /// <param name="key">哈希计算的密钥</param>
      public static string SHA256ToBase64(string content, string key )
            {
                using (var algorithm = KeyedHashAlgorithm.Create("HMACSHA256"))
                {
                    algorithm.Key = Encoding.UTF8.GetBytes(secret.ToCharArray());
                    var signStr = content;
                    return Convert.ToBase64String(algorithm.ComputeHash(Encoding.UTF8.GetBytes(signStr.ToCharArray())));
                }
            }
    

    MD5

    Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。

    C#代码

    /// <summary>
    /// 16位MD5加密
    /// </summary>
    /// <param name="password"></param>
    /// <returns></returns>
    public static string MD5Encrypt16(string password)
    {
        var md5 = new MD5CryptoServiceProvider();
        string t2 = BitConverter.ToString(md5.ComputeHash(Encoding.Default.GetBytes(password)), 4, 8);
        t2 = t2.Replace("-", "");
        return t2;
    }
    
    /// <summary>
    /// 32位MD5加密
    /// </summary>
    /// <param name="password"></param>
    /// <returns></returns>
    public static string MD5Encrypt32(string password)
    {
        string cl = password;
        string pwd = "";
        MD5 md5 = MD5.Create(); //实例化一个md5对像
        // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择 
        byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));
        // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
        for (int i = 0; i < s.Length; i++)
        {
            // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符 
            pwd = pwd + s[i].ToString("x2");
        }
        return pwd;
    }
    
    
    /// <summary>
    /// 64位MD5加密
    /// </summary>
    public static string MD5Encrypt64(string password)
    {
        string cl = password;
        //string pwd = "";
        MD5 md5 = MD5.Create(); //实例化一个md5对像
        // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择 
        byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));
        return Convert.ToBase64String(s);
    }
    

    这里提供一个在VS提示已过时的简单写法

    /// <summary>
    /// 32位MD5加密
    /// </summary>
     public static string md5(string str)
     {
         var strEncrypt = string.Empty; 
          strEncrypt = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5").ToLower();
    
          return strEncrypt;
     }
    

    SHA1和MD5的对比

    1.SHA1更不易被破解.
    2.MD5在机器上运算更快.

    相关文章

      网友评论

          本文标题:C#常用加密(SHA..., MD5)--待续

          本文链接:https://www.haomeiwen.com/subject/xzunaqtx.html