• 使用MD5加密字符串


    一、概念:

    MD5码以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值

    二、C#使用MD5进行加密字符串

    MD5的引用命名空间是System.Security.Cryptography;

    1.固定返回固定长度字符串(16位或者32位)

    /// <summary>
    /// 用MD5加密字符串,可选择生成16位或者32位的加密字符串
    /// </summary>
    /// <param name="password">待加密的字符串</param>
    /// <param name="bit">位数,一般取值16 或 32</param>
    /// <returns>返回的加密后的字符串</returns>
    public string MD5Encrypt(string password, int bit)
    {
    MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider();
    byte[] hashedDataBytes;
    hashedDataBytes = md5Hasher.ComputeHash(Encoding.GetEncoding("gb2312").GetBytes(password));
    StringBuilder tmp = new StringBuilder();
    foreach (byte i in hashedDataBytes)
    {
    tmp.Append(i.ToString("x2"));
    }
    if (bit == 16)
    return tmp.ToString().A(8, 16);
    else
    if (bit == 32) return tmp.ToString();//默认情况
    else return string.Empty;
    }

    2、加密字符串

    /// <summary>
    /// 用MD5加密字符串
    /// </summary>
    /// <param name="password">待加密的字符串</param>
    /// <returns></returns>
    public string MD5Encrypt(string password)
    {
    MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider();
    byte[] hashedDataBytes;
    hashedDataBytes = md5Hasher.ComputeHash(Encoding.GetEncoding("gb2312").GetBytes(password));
    StringBuilder tmp = new StringBuilder();
    foreach (byte i in hashedDataBytes)
    {
    tmp.Append(i.ToString("x2"));
    }
    return tmp.ToString();
    }
    

      3、标准的MD5加密32位小写的:

      public static string GetMD5(string myString)
            {
                MD5 md5 = new MD5CryptoServiceProvider();
                //byte[] fromData = System.Text.Encoding.Unicode.GetBytes(myString);
                byte[] fromData = System.Text.Encoding.UTF8.GetBytes(myString);//
                byte[] targetData = md5.ComputeHash(fromData);
                string byte2String = null;
    
                for (int i = 0; i < targetData.Length; i++)
                {
                    byte2String += targetData[i].ToString("x");
                }
    
                return byte2String;
            }

    如果用上面这个标准的会有一个问题,就是丢失位数,所以字节转换成字符串的时候要保证是2位宽度啊,某个字节为0转换成字符串的时候必须是00的,否则就会丢失位数啊。不仅是0,1~9也一样。

    用以下代码就可以避免:

    public static string GetMD5(string myString)
            {
                MD5 md5 = new MD5CryptoServiceProvider();
                //byte[] fromData = System.Text.Encoding.Unicode.GetBytes(myString);
                byte[] fromData = System.Text.Encoding.UTF8.GetBytes(myString);//
                byte[] targetData = md5.ComputeHash(fromData);
                string byte2String = null;
    
                for (int i = 0; i < targetData.Length; i++)
                {
                    //这个是很常见的错误,你字节转换成字符串的时候要保证是2位宽度啊,某个字节为0转换成字符串的时候必须是00的,否则就会丢失位数啊。不仅是0,1~9也一样。
                    //byte2String += targetData[i].ToString("x");//这个会丢失
                    byte2String = byte2String+ targetData[i].ToString("x2");
                }
    
                return byte2String;
            }
  • 相关阅读:
    Goahead在linux环境下安装部署
    vim卡住怎么办
    Clickhouse 实现 row number功能
    JavaScript ES6 模块化
    MySQL012事务的四个基本特征是什么
    MySQL015简述mysql中索引类型有哪些,以及对数据库的性能的影响
    MySQL010MySQL执行计划怎么看
    JavaScript ES6 Promise
    MySQL011如何处理MySQL的慢查询
    MySQL009MySQL为什么需要主从复制和读写分离
  • 原文地址:https://www.cnblogs.com/hudean/p/11714298.html
Copyright © 2020-2023  润新知