Java之MD5值校验

<<首先声明本文内容有参考网上资源,文章开头我首先要向他们表示感谢,众包力量无穷啊>>

      之前学过《计算机安全》这门课,了解了MD5,不过没有自己具体实现过,今天讲的也只是调用java包中已提供的相关功能

              MD5这个私有类

因为项目测试的需要,自己添加了个MD5私有类,用来检测原始文件内容和上传后被get下来的文件内容是否相同。代码贴下!

private class MD5 {  
	    private MessageDigest md5;  
	    private char hexDigits[] = {
	            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd',  'e', 'f'};  
	    
	    public MD5() {  
	        try {  
	            md5 = MessageDigest.getInstance("MD5");  
	        } catch (NoSuchAlgorithmException e) {  
	            throw new RuntimeException("no such md5 algorithm!", e);  
	        }  
	    }  
	    
	    public String getFileMD5(File file) {
	    	FileInputStream fis = null;
	    	try {
	    		fis = new FileInputStream(file);
	    		byte[] buffer = new byte[8192];
	    		int length;
	    		while( (length = fis.read(buffer)) != -1) {
	    			md5.update(buffer, 0, length);
	    		}
	    		return hexString(md5.digest());
	    	} catch (FileNotFoundException e) {
	            logger.error("File<"+ file.getAbsolutePath() + "> not found");
	            return null;
	        } catch (IOException e) {
	            logger.error("MD5 file " + file.getAbsolutePath() + " failed:" + e.getMessage());
	            return null;
	        } finally {
	            try {
	                if (fis != null) 
	                	fis.close();
	            } catch (IOException e) {
	                e.printStackTrace();
	            }
	        }
	    }
	    
	    public String hexString(byte[] source) { 
	        char str[] = new char[16 * 2];
	        int k = 0;
	        for (int i = 0; i < 16; i++) {
	            byte byte0 = source[i];
	            str[k++] = hexDigits[byte0 >>> 4 & 0xf]; 
	            str[k++] = hexDigits[byte0 & 0xf];
	        }  
	        return new String(str);  
	    }  
	    
	}  
        代码应该是比较容易看懂的,一个私有成员md5,用于计算MD5值, 以及一个char数组,用于将得到的MD5值转换为十六进制(PS: md5值一般以十六进制表示,那到底是几位16进制呢?请看后面分析)。

        1、构造函数就是根据提供的参数MD5对私有成员md5进行初始化

        2、主要的方法就是根据传入的文件名file得到文件内容的MD5值(说过了,以16进制表示,String类型返回),当然,如果你要计算一段字符串的MD5,相应做修改即可,传参改为string, file那部分删掉之类的,比较简单啦

        3、我们看到中间是调用md5.update操作,将文件内容以byte形式传入,最后通过md5.digest计算出MD5的byte数组,我们另外添加的辅助方法hexString就是用来将byte数组转换成字符串的,看到了吗,MD5是32位16进制数哦


提供了这个私有类作为工具,那么自己就可以利用到项目当中检测两个文件的MD5值是否相同了,这个不用说了吧,很easy不是?

第一次在CSDN上发篇博客,谢谢各位看官支持!可以留言哦~微笑

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值