MD5是什么?

MD5是message-digest algorithm 5(信息-摘要算法)的缩写,被广泛用于加密和解密技术上,它可以说是文件的"数字指纹"。任何一个文件,无论是可执行程序、图像文件、临时文件或者其他任何类型的文件,也不管它体积多大,都有且只有一个独一无二的MD5信息值,并且如果这个文件被修改过,它的MD5值也将随之改变。因此,我们可以通过对比同一文件的MD5值,来校验这个文件是否被"篡改"过。
MD5到底有什么用?
当我们下载了文件后,如果想知道下载的这个文件和网站的原始文件是否一模一样,就可以给自己下载的文件做个MD5校验。如果得到的MD5值和网站公布的相同,可确认所下载的文件是完整的。如有不同,说明你下载的文件是不完整的:要么就是在网络下载的过程中出现错误,要么就是此文件已被别人修改。为防止他人更改该文件时放入病毒,最好不要使用。一般正规的站点,都会提供文件md5校验码,这是为了双方都方便。
package com.mr.util;

import java.io.File;
import java.io.FileInputStream;
import java.security.MessageDigest; /**
* 字节数组转成16进位制数
*/
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;
}
} 转载原文链接:http://blog.csdn.net/supersnow0622/article/details/7536473

最新文章

  1. webpack如何与gulpfile联合的使用
  2. WPF x名称空间
  3. BibTex插入Reference
  4. 【收集】JAVA多文件 上传文件接口代码 -兼容app
  5. php大力力 [033节] 随便看看:PHP程序员学习C++
  6. Golang学习 - unsafe 包
  7. Linux busybox mount -a fstab
  8. iOS开发实践:一个类微博客户端从启动到与用户交互的过程
  9. sublime支持显示中文
  10. Windows Phone App Studio发布
  11. android之DPAD上下左右四个键控制
  12. [BZOJ 1054][HAOI 2008]移动玩具 状态压缩
  13. android获取string.xml的值
  14. GPS文件中的C1---&gt;P1转换
  15. Markdown 简介及基础语法
  16. linux学习 (Linux就该这么学)
  17. CentOS网络设置 couldn't resolve host 'mirrorlist.centos.org问题解决
  18. Linux系统运维笔记(二),Linux文件编辑命令
  19. Windows-caffe配置
  20. Http请求之基于HttpUrlConnection,支持Header,Body传值,支持Multipart上传文件:

热门文章

  1. 对于yum中没有的源的解决办法-EPEL
  2. 【LeetCode】Sort Colors 解题报告
  3. Atitit. http 代理原理 &#160;atiHttpProxy &#160;大木马
  4. 图解PCIE原理(从软件角度)
  5. springboot admin server常用配置
  6. 利用C#的指针编写都一个简单链表
  7. jQuery - 获得内容和属性
  8. vs2010 MSDN文档安装方法
  9. java中for循环执行过程
  10. maven+nexus setting.xml配置(收藏)