精华内容
下载资源
问答
  • [Golang]计算一个文件MD5值

    万次阅读 2018-05-07 16:00:13
    在实际的开发过程中,总需要对文件进行md5加密的需求,在开发过程中,我就遇到了将表单文件MD5后再存储本地的需求。 解决 MD5的所需要的包在”crypto/md5”包中,需要先实例化一个MD5对象,然后在此基础上调用...

    说明

    在实际的开发过程中,总需要对文件进行md5加密的需求,在开发过程中,我就遇到了将表单文件MD5后再存储本地的需求。

    解决

    MD5的所需要的包在”crypto/md5”包中,需要先实例化一个MD5对象,然后在此基础上调用sum方法即可

    md5 := md5.New()
    io.Copy(md5,file)
    MD5Str := hex.EncodeToString(md5.Sum(nil))

    上面的代码实现了计算了文件MD5,其中file是multipart.File类型的,也可以是其他的已打开的其他文件类型。
    当然也可以不使用io.copy,而是直接使用sum函数来计算:

    md5 := md5.New()
    MD5Str := hex.EncodeToString(md5.Sum(file))

    这样是直接调用了sum函数来计算文件的值可能要比io.copy稍微慢一些。

    字符串的MD5

    有时候需要将已知的一段字符串加密,其实和文件加密大概是类似的,只需要调用write方法将字符串写入hash中:

    md5 := md5.New()
    md5.Write([]byte("hello,world!"))
    MD5Str := hex.EncodeToString(md5.Sum(nil))
    展开全文
  • Java计算文件MD5值

    千次阅读 2019-02-28 18:27:59
    在文件上传下载相关的操作中,我们通常会遇到需要计算文件MD5的场景,计算文件MD5值的方法和计算字符串的MD5值有些类似,这里先来介绍普通的计算字符串的MD5方法。 commons-codec这个jar给我们提供了一个MD5实现,...

    在文件上传下载相关的操作中,我们通常会遇到需要计算文件MD5的场景,计算文件MD5值的方法和计算字符串的MD5值有些类似,这里先来介绍普通的计算字符串的MD5方法。

    commons-codec这个jar给我们提供了一个MD5实现,普通的MD5实现,基本大同小异,最终的结果也相同,这里不能说的太过,为什么称为普通的MD5,因为实现思路是一样的,而且只要是相同的字符串,计算的结果也一样,因此也很容易被破解,虽然MD5这个算法本身是不可逆的,但是根据彩虹表的破解方式,或者在线破解,一些常用的密码很容易被猜到。

    先来看看commons-codec提供的MD5的实现:

    DigestUtils.md5Hex(String source);

    就这么一行简单的代码就帮我们实现了MD5算法。

    也有很多不用commons-codec提供的api,借助java security api实现MD5算法的,这里给出一个简单的示例:

    private static final String[] strHex=
    {"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"};
    private static MessageDigest digest = null;
    
    static{
    	try {
    		digest = MessageDigest.getInstance("MD5");
    	} catch (NoSuchAlgorithmException e) {
    		e.printStackTrace();
    	}
    }
    public static String getMD5(String source){
    	try {
    		byte[] data = source.getBytes("UTF-8");
    		return buffer2Hex(digest.digest(data));
    	} catch (UnsupportedEncodingException e) {
    		e.printStackTrace();
    	}	
    	return null;
    }
    
    public static String buffer2Hex(byte[] data){
    	StringBuffer sb = new StringBuffer();
    	for(int i=0;i<data.length;i++){
    		int d = data[i];
    		if(d<0){
    			d+=256;
    		}
    		int d1 = d / 16;
    		int d2 = d % 16;
    		sb.append(strHex[d1]+strHex[d2]);
    	}
    	return sb.toString();
    }

    相信大家常见的MD5算法就是长这个样子的,其中,我们看到的复杂的部分就是在进行字节数组转十六进制。其实java提供的api已经帮助我们完成了MD5核心算法,我们这里进行的字节数组转16进制,其实是这个算法的冰山一角。

    当然字节数组转16进制,也有很多办法,所以这个方法也有很多变种:

    public static String buffer2Hex3(byte[] data){
            StringBuffer sb = new StringBuffer();
            for(int i=0;i<data.length;i++){
                int d1 = data[i];
                if(d1<0){
                    d1 = d1 & 0xff;
                }
                if(d1<16){
                    sb.append("0");
                }
                sb.append(Integer.toHexString(d1));
            }
            return sb.toString();
    }

    借助BigInteger直接转16进制:    
    public static String buffer2Hex4(byte[] data){
            BigInteger res = new BigInteger(1, data);
            return res.toString(16);

    当然也有利用字符数组来替换前面的字符串数组的算法:

    private static final char[] digestHex={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};

    public static String buffer2Hex2(byte[] data){
            StringBuffer sb = new StringBuffer();
            for(int i=0;i<data.length;i++){
                byte d = data[i];
                char d1 = digestHex[(d & 0xf0) >> 4];
                char d2 = digestHex[d & 0xf];
                sb.append(d1);
                sb.append(d2);
            }
            return sb.toString();
    }

    我们知道,这些不同的实现,核心的算法是字节数组转十六进制。那么对于文件而言,如何计算MD5,我们可以试想,如果把文件转为字节数组了,是不是就可以套用这个后面字节数组转十六进制的方法了。事实上,确实如此,我们只需要将文件读入内存,然后将其转为字节数组,剩下的就是和求字符串的MD5方法一样了。

    commons-io提供了FileUtils.readFileToByteArray(File file)这个api,得到的结果就是byte[]类型的字节数组。所以求文件的MD5算法就有了这样简单的实现了:

    public static String md5Hex(File file) {
            try {
                return DigestUtils.md5Hex(FileUtils.readFileToByteArray(file));
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
      }

    如果你有兴趣,可以将FileUtils.readFileToByteArray(file)方法替换为自己编写的一个简单的实现:通过IO流的方式将文件读入内存,然后将其转为byte[]类型的数组。

    常见的字符串经过MD5加密之后的结果:

    • 123456->e10adc3949ba59abbe56e057f20f883e
    • admin ->21232f297a57a5a743894a0e4a801fc3
    • 111111->96e79218965eb72c92a549dd5a330112
    • 666666->f379eaf3c831b04de153469d1bec345e 

    我们通过MessageDigest.digest(byte[]) 得到的数组,无论原始字符串或者文件多大,得到的字节数组,长度都是16,因此根据10进制转为16进制,结果都是32位的。再次说明了,普通的MD5算法还是有可能被破解的。

    展开全文
  • 计算文件MD5值的多种方法

    千次阅读 2019-08-22 11:13:35
    计算文件MD5值的多种方法方法:CMD计算本地文件方法二:Java计算上传文件方法三:Java计算本地文件demo1demo2 方法:CMD计算本地文件 进入cmd,输入命令 // F:\a.txt是文件路径 certutil -hashfile F:\a.txt MD5 ...

    方法一:CMD计算本地文件

    进入cmd,输入命令

    // F:\a.txt是文件路径
    certutil -hashfile F:\a.txt MD5
    

    如下所示:
    在这里插入图片描述

    方法二:Java计算上传文件

    import org.springframework.web.multipart.MultipartFile;
    import java.security.MessageDigest;
    import java.io.File;
    
    public String geMD5(MultipartFile file) throws Exception {
        		MessageDigest mMessageDigest  = MessageDigest.getInstance("MD5");
        		InputStream fis = file.getInputStream();
        		byte[] buffer = new byte[1024];
        		int length = -1;
        		while ((length = fis.read(buffer, 0, 1024)) > 0) {
        			mMessageDigest.update(buffer, 0, length);
        		}
        		fis.close();
        		return new BigInteger(1, mMessageDigest.digest()).toString(16);
        }
    

    方法三:Java计算本地文件

    demo1

    import org.apache.commons.codec.binary.Hex;
    import java.security.MessageDigest;
    import java.io.File;
    import java.io.FileInputStream;
    
    private String getMD5(String filePath) throws Exception {
    		File file = new File(filePath);
    		FileInputStream fis= new FileInputStream(file);
    		MessageDigest MD5 = MessageDigest.getInstance("MD5");
    		byte[] buffer = new byte[1024];
    		int length;
    		while ((length = fis.read(buffer)) != -1) {
    			MD5.update(buffer, 0, length);
    		}
    		fis.close();
    		return new String(Hex.encodeHex(MD5.digest()));
    	}
    

    demo2

    import org.apache.commons.codec.binary.Hex;
    import java.security.MessageDigest;
    import java.io.File;
    import java.io.FileInputStream;
    
    private String getMD5(String filePath) throws Exception {
    		File file = new File(filePath);
    		MessageDigest MD5 = MessageDigest.getInstance("MD5");
    		FileInputStream fis = new FileInputStream(file);
    		byte[] buffer = new byte[1024];
    		int length = -1;
    		while ((length = fis.read(buffer, 0, 1024)) > 0) {
    			MD5.update(buffer, 0, length);
    		}
    		fis.close();
    		return new BigInteger(1, MD5.digest()).toString(16);
    	}
    
    展开全文
  • js计算出来的文件md5值跟java计算出来的不一致

    最近在项目中遇到了大文件分割上传问题,为了保证上传的文件的有效性需要确保分割的文件上传首先要成功,因此用到了md5加密,在js代码中上传文件之前将要上传的文件内容进行md5加密,然后作为其中一个参数传到后端服务器,后端再收到文件后对文件进行同样的md5加密,然后将两个md5值对比,验证成功则人为文件分割块是正确的,然后保存,但是却遇到一个问题:

    笔者最初使用的是jquery.MD5.js这个库进行加密,尝试对几个字符串加密后与java端产生的相同,但是上传文件时却md5校验失败,最终发现问题出在下面:

      function uploadFile1(blob, index, start, end,fileSize) {
    var xhr;
    var fd;
    var chunk;  
    var sliceIndex=blob.name+index;
    chunk =blob.slice(start,end);//切割文件 
    fd = new FormData();
    fd.append("filedata", chunk,blob.name);
    var params = {};
    params.range = 'bytes ' + start + '-' +
                        (end - 1) + '/' + fileSize;
                var f=new FileReader();  
                f.readAsBinaryString(chunk);  
                $(f).load(function(e){  
                    var fileAllMd5=e.target.result;  
                    var md5 = CryptoJS.MD5(CryptoJS.enc.Latin1.parse(fileAllMd5)).toString();//$.md5(fileAllMd5);
                    //console.log(fileAllMd5);
                    params.md5 = md5;
                    fd.append("params",JSON.stringify(params));
           $.ajax({  
               url: url,  
               type: 'POST',  
               data: fd,
               "async":false,
               dataType: 'JSON',  
               cache: false,  
               processData: false,  
               contentType: false  
           }).done(function(ret){  
           
            //debugger
           });                  
                });                     
    }  

    使用FileReader读取文件内容为利用UTF-16编码的,但是md5插件在计算md5值时是基于二进制流的,因此需要将FileReader读出来的二进制流(已经被转换成UTF-16编码)还原成二进制流。latin—1编码同二进制流,所以将js流转换成latin—1编码即可,最终用到了谷歌的crypto-js库,github地址为:https://github.com/jakubzapletal/crypto-js

    最终由于jquery.md5插件与crypto-js兼容性问题,放弃jquery.md5插件使用crypto-js插件,相关部分代码见上面代码标红部分!


    注:上面用到的crypto-js相关文件如下:

    <script src="xx/crypto-js/core.js"></script>
    <script src="xx/crypto-js/enc-base64.js"></script>
    <script src=".xx/crypto-js/enc-utf16.js"></script>
    <script src="xx/crypto-js/md5.js"></script>


    参考:http://blog.csdn.net/butcher5351750/article/details/24402025

    展开全文
  • java计算文件MD5值

    千次阅读 2019-11-07 23:03:43
     System.out.println("文件md5值:" + bigInt.toString(16));  } catch (FileNotFoundException e) {  e.printStackTrace();  } catch (NoSuchAlgorithmException e) {  e.printStackTrace();  } catch ...
  • 比较两个文件是否相同,一般都是比较文件MD5值是否相同,java中计算MD5值的方法如下: private MessageDigest mMessageDigest = null; try { mMessageDigest = MessageDigest.getInstance("MD5"); } catch ...
  • js计算文件MD5值

    千次阅读 2017-10-30 20:07:55
    百度百科解释MD5Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的种散列函数,用以提供消息的完整性保护。该算法的文件号为RFC 1321(R.Rivest,MIT Laboratory for ...
  • C++计算文件MD5值

    万次阅读 2013-04-11 14:23:08
    MD5ChecksumDefines.h //Magic initialization constants #define MD5_INIT_STATE_0 0x67452301 #define MD5_INIT_STATE_1 0xefcdab89 #define MD5_INIT_STATE_2 0x98badcfe #define MD5_INIT_STATE_3 0x10325476
  • 计算文件MD5值 (hashcode)

    千次阅读 2018-06-07 08:38:39
    /** * 计算文件MD5 * @return 文件MD5 */ public static String getMd5ByFile(String path) throws FileNotFoundException { File file = new File(path); String value = null; ...
  • 用C++计算文件MD5值

    千次阅读 2018-11-23 16:22:44
    用C++计算文件MD5值,相关的代码如下: md5.h #ifndef MD5_H #define MD5_H #include &lt;string&gt; #include &lt;fstream&gt; /* Type define */ typedef unsigned char byte; typedef ...
  • MD5 C++实现 对文件计算MD5值

    热门讨论 2011-08-31 13:08:47
    MD5值算法 C++实现 bool GetFileMd5(char *pMd5, const char *pFileName);
  • python3 计算字符串、文件md5值

    千次阅读 2018-09-19 16:55:34
    字符串md5值 import hashlib ... 计算字符串md5值 :param string: 输入字符串 :return: 字符串md5 &quot;&quot;&quot; m = hashlib.md5() m.update(string.encode())
  • C语言计算文件md5值

    千次阅读 2016-10-09 17:27:55
    google了好久都没有找到合适的,其实我只需要一个函数,能计算文件md5 就好, 后来找到了 md5.h 和 md5.c 的源文件,仿照别人的封装了个函数(他那个有问题,和 md5sum 计算出来的都不一样)。 废话少...
  • STM32计算文件MD5值校验数据

    千次阅读 2020-03-28 11:30:51
    MD5计算将整个文件或者字符串,通过其不可逆的字符串变换计算,产生文件或字符串的MD5散列。任意两个文件、字符串不会有相同的散列(即“很大可能”是不一样的,理论上要创造出两散列相同的字符串是很...
  • Windows 计算文件MD5值

    千次阅读 2018-12-20 13:15:56
    certutil -hashfile yourfilename.ext MD5 certutil -hashfile yourfilename.ext SHA1 certutil -hashfile yourfilename.ext SHA256 转自:...
  • 第十一题:利用python计算文件MD5值(从前台上传一个文件,后台计算MD5值后,返给前端) 注意题目要求:从前台上传一个文件,后台计算MD5值后,返给前端,这就需要我们再引入一个os模块实现输入功能。 首先我们先...
  • MD5(Message Digest Algorithm,信息摘要算法),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列(hash value),用于确保信息传输完整一致。它后面这个数字 5 是因为它是为了取代 MD4 而...
  • window下计算文件md5值的方法

    千次阅读 2019-06-10 19:18:54
    C:\Users\admin>D: D:\>cd clientfile D:\clientfile>sertutil -hashfile wakeup_common_zlkc010_20180508.bin MD5
  • Linux下C语言计算文件md5值(长度32)

    万次阅读 多人点赞 2014-11-07 18:56:51
    google了好久都没有找到合适的,其实我只需要一个函数,能计算文件md5 就好, 后来找到了 md5.h 和 md5.c 的源文件,仿照别人的封装了个函数(他那个有问题,和 md5sum 计算出来的都不一样)。 废话少说,直接...
  • 文件MD5值计算

    千次阅读 2015-09-25 14:47:01
    import java.io.File; import java.io.FileInputStream; import java.math.BigInteger; import java.security.MessageDigest;...public class TestBigFileMD5 { private static final String FILE_NAME=
  • python 实现大文件md5值计算

    千次阅读 2019-03-12 16:29:04
    hashlib.md5(文件内容)实现了对文件md5计算,注意参数为文件内容而不是文件路径。 import hashlib with open('2.jpeg','rb') as f: data = f.read() d5 = hashlib.md5(data) print(d5.hexdigest())...
  • C语言计算文件MD5值

    千次阅读 2017-10-22 23:11:19
    转载自: http://blog.csdn.net/a_ran/article/details/40897159工程包下载:
  • 如何计算文件MD5值

    千次阅读 2018-05-15 15:34:37
    把B文件MD5值放入到A中存放:using UnityEngine; using System.Collections; using UnityEditor; using System.IO; public class XLuaEditor : MonoBehaviour { [MenuItem("XLua/Create A.txt")] ...
  • Java计算文件MD5值(支持大文件)

    千次阅读 2018-08-21 14:14:39
    sign文件签名生成方法为:首先计算文件MD5校验和,然后对校验和做base64转码,将base64转码的结果放到sign文件中。 &amp;amp;nbsp; MD5校验和使用Linux操作系统自带的&amp;amp;nbsp;md5sum&amp;amp;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 187,871
精华内容 75,148
关键字:

如何计算一个文件的md5值