zoukankan      html  css  js  c++  java
  • MD5在java中的使用

    MD5是什么?        

    MD5是message-digest algorithm 5(信息-摘要算法)的缩写,被广泛用于加密和解密技术上,它可以说是文件的"数字指纹"。任何一个文件,无论是可执行程序、图像文件、临时文件或者其他任何类型的文件,也不管它体积多大,都有且只有一个独一无二的MD5信息值,并且如果这个文件被修改过,它的MD5值也将随之改变。因此,我们可以通过对比同一文件的MD5值,来校验这个文件是否被"篡改"过。 
    MD5到底有什么用?  
    当我们下载了文件后,如果想知道下载的这个文件和网站的原始文件是否一模一样,就可以给自己下载的文件做个MD5校验。如果得到的MD5值和网站公布的相同,可确认所下载的文件是完整的。如有不同,说明你下载的文件是不完整的:要么就是在网络下载的过程中出现错误,要么就是此文件已被别人修改。为防止他人更改该文件时放入病毒,最好不要使用。一般正规的站点,都会提供文件md5校验码,这是为了双方都方便。
           今天上网搜索在Lucene如何避免重复建立索引,看到介绍了一种方法就是用MD5为每个文件赋一个惟一的值,当再次为同一个文件建立索引时,会通过MD5的值识别出相同的文件。于是收藏了MD5在java中使用的代码:
    package com.mr.util;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.security.MessageDigest;
    
    /**
     * @author CXY
     */
    public class SecurityUtil {
    	/**
    	 * 把字节数组转成16进位制数
    	 * @param bytes
    	 * @return
    	 */
    	public static String bytesToHex(byte[] bytes) {
    		StringBuffer md5str = new StringBuffer();
    		//把数组每一字节换成16进制连成md5字符串
    		int digital;
    		for (int i = 0; i < bytes.length; i++) {
    			 digital = bytes[i];
    			if(digital < 0) {
    				digital += 256;
    			}
    			if(digital < 16){
    				md5str.append("0");
    			}
    			md5str.append(Integer.toHexString(digital));
    		}
    		return md5str.toString().toUpperCase();
    	}
    	
    	/**
    	 * 把字节数组转换成md5
    	 * @param input
    	 * @return
    	 */
    	public static String bytesToMD5(byte[] input) {
    		String md5str = null;
    		try {
    			//创建一个提供信息摘要算法的对象,初始化为md5算法对象
    			MessageDigest md = MessageDigest.getInstance("MD5");
    			//计算后获得字节数组
    			byte[] buff = md.digest(input);
    			//把数组每一字节换成16进制连成md5字符串
    			md5str = bytesToHex(buff);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return md5str;
    	}
    	/**
    	 * 把字符串转换成md5
    	 * @param str
    	 * @return
    	 */
    	public static String strToMD5(String str) {
    		byte[] input = str.getBytes();
    		return bytesToMD5(input);
    	}
    	
    	/**
    	 * 把文件转成md5字符串
    	 * @param file
    	 * @return
    	 */
    	public static String fileToMD5(File file) {
    		if(file == null) {
    			return null;
    		}
    		if(file.exists() == false) {
    			return null;
    		}
    		if(file.isFile() == false) {
    			return null;
    		}
    		FileInputStream fis = null;
    		try {
    			//创建一个提供信息摘要算法的对象,初始化为md5算法对象
    			MessageDigest md = MessageDigest.getInstance("MD5");
    			fis = new FileInputStream(file);
    			byte[] buff = new byte[1024];
    			int len = 0;
    			while(true) {
    				len = fis.read(buff, 0, buff.length);
    				if(len == -1){
    					break;
    				}
    				//每次循环读取一定的字节都更新
    				md.update(buff,0,len);
    			}
    			//关闭流
    			fis.close();
    			//返回md5字符串
    			return bytesToHex(md.digest());
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return null;
    	}
    }
  • 相关阅读:
    Photoshop 基础七 位图 矢量图 栅格化
    Photoshop 基础六 图层
    Warfare And Logistics UVALive
    Walk Through the Forest UVA
    Airport Express UVA
    Guess UVALive
    Play on Words UVA
    The Necklace UVA
    Food Delivery ZOJ
    Brackets Sequence POJ
  • 原文地址:https://www.cnblogs.com/huqianliang/p/5683989.html
Copyright © 2011-2022 走看看