c# MD5

https://www.cnblogs.com/healer007/p/5062189.html

public class MD5Util
{
    /// <summary>
    /// 获取文件的md5值
    /// </summary>
    /// <param name="file"></param>
    /// <returns></returns>
    public static string GetFileMD5(string file)
    {
        var md5 = MD5.Create();
        StringBuilder stringBuilder= new StringBuilder();
        // 打开的文件也可读取
        FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read,FileShare.ReadWrite);
        byte[] s = md5.ComputeHash(fs);
        fs.Close();
        // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
        for (int i = 0; i < s.Length; i++)
        {
            // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符 
            stringBuilder.Append( s[i].ToString("X") );
        }
        return stringBuilder.ToString();
    }

    public static string GetTextMD5(string text)
    {
        StringBuilder stringBuilder = new StringBuilder();
        MD5 md5 = MD5.Create(); //实例化一个md5对像
                                // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择 
        byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(text));
        // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
        for (int i = 0; i < s.Length; i++)
        {
            // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符 
            stringBuilder.Append ( s[i].ToString("X") );
        }
        return stringBuilder.ToString();
    }
}