• 计算字符串和文件的MD5值


            //计算字符串的MD5值
            public string GetMD5(string sDataIn)
            {
                MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
                byte[] bytValue, bytHash;
                bytValue = System.Text.Encoding.UTF8.GetBytes(sDataIn);
                bytHash = md5.ComputeHash(bytValue);
                md5.Clear();
                string sTemp = "";
                for (int i = 0; i < bytHash.Length; i++)
                {
                    sTemp += bytHash[i].ToString("X").PadLeft(2, '0');
                }
                return sTemp.ToLower();
            }
            
    
            //计算文件的MD5值
            public string MD5Value(string filepath)
            {
                MD5 md5 = new MD5CryptoServiceProvider();
                byte[] md5ch;
                using (FileStream fs = File.OpenRead(filepath))
                {
                    md5ch = md5.ComputeHash(fs);
                }
                md5.Clear();
                string strMd5 = "";
                for (int i = 0; i < md5ch.Length - 1; i++)
                {
                    strMd5 += md5ch[i].ToString("x").PadLeft(2, '0');
                }
                return strMd5;
            }
    MD5CryptoServiceProvider继承MD5类,MD5类实现IDisposable接口,应用using
    private static string GetMD5FromString(string msg)
            {
                //1.创建一个用来计算MD5值的类的对象
                using (MD5 md5 = MD5.Create())
                {
                    //把字符串转换为byte[]
                    //注意:如果字符串中包含汉字,则这里会把汉字使用utf-8编码转换为byte[],当其他地方
                    //计算MD5值的时候,如果对汉字使用了不同的编码,则同样的汉字生成的byte[]是不一样的,所以计算出的MD5值也就不一样了。
                    byte[] msgBuffer = Encoding.Default.GetBytes(msg);
    
                    //2.计算给定字符串的MD5值
                    //返回值就是就算后的MD5值,如何把一个长度为16的byte[]数组转换为一个长度为32的字符串:就是把每个byte转成16进制同时保留2位即可。
                    byte[] md5Buffer = md5.ComputeHash(msgBuffer);
                    //md5.Clear();//释放资源-->using不用释放
    
                    StringBuilder sbMd5 = new StringBuilder();
                    for (int i = 0; i < md5Buffer.Length; i++)
                    {
                        sbMd5.Append(md5Buffer[i].ToString("x2"));
                    }
                    return sbMd5.ToString();
                }
            }
    
    
            private static string GetMD5FromFile(string path)
            {
                using (MD5 md5 = MD5.Create())
                {
                    using (FileStream fsRead = File.OpenRead(path))
                    {
                        byte[] bytes = md5.ComputeHash(fsRead);
                        //md5.Clear();//释放资源-->using不用释放
                        StringBuilder sbMd5 = new StringBuilder();
                        for (int i = 0; i < bytes.Length; i++)
                        {
                            sbMd5.Append(bytes[i].ToString("X2"));
                        }
                        return sbMd5.ToString();
                    }
                }
            }
  • 相关阅读:
    后端框架:SpringBoot+Mybatis+Dubbox(zookeeper+dubbo-admin)
    java代码执行mysql存储过程
    SpringBoot整合Junit
    摘要算法之MD5
    java如何控制下载的文件类型是txt还是doc?如何将文件名返回给前端?Content-disposition
    Android Atuido 连接模拟器
    verilog CRC 校验
    Altium Designer(AD软件)如何导出gerber文件
    SpringBoot集成mybatisplus
    C++ | 通过智能指针实现资源管理
  • 原文地址:https://www.cnblogs.com/T-J-D/p/3339097.html
Copyright © 2020-2023  润新知