MD5在java中的使用

来源:互联网 发布:同城网络超市 编辑:程序博客网 时间:2024/06/05 03:25
MD5是什么?        
MD5是message-digest algorithm 5(信息-摘要算法)的缩写,被广泛用于加密和解密技术上,它可以说是文件的"数字指纹"。任何一个文件,无论是可执行程序、图像文件、临时文件或者其他任何类型的文件,也不管它体积多大,都有且只有一个独一无二的MD5信息值,并且如果这个文件被修改过,它的MD5值也将随之改变。因此,我们可以通过对比同一文件的MD5值,来校验这个文件是否被"篡改"过。 MD5到底有什么用?  当我们下载了文件后,如果想知道下载的这个文件和网站的原始文件是否一模一样,就可以给自己下载的文件做个MD5校验。如果得到的MD5值和网站公布的相同,可确认所下载的文件是完整的。如有不同,说明你下载的文件是不完整的:要么就是在网络下载的过程中出现错误,要么就是此文件已被别人修改。为防止他人更改该文件时放入病毒,最好不要使用。一般正规的站点,都会提供文件md5校验码,这是为了双方都方便。
       今天上网搜索在Lucene如何避免重复建立索引,看到介绍了一种方法就是用MD5为每个文件赋一个惟一的值,当再次为同一个文件建立索引时,会通过MD5的值识别出相同的文件。于是收藏了MD5在java中使用的代码:
<div class="content"><pre class="reply-text mb10" id="best-answer-content" name="code" style="white-space: pre-wrap; word-wrap: break-word;">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;}}
                                             
0 0
原创粉丝点击