当前位置: 首页 > news >正文

MD5在java中的使用

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;
	}
}
 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • android sqlite3 adb
  • android ADB常用的命令
  • Android中自定义ViewGroup
  • jstl学习
  • Eclipse中java文件和jsp字体大小设置
  • mysql卸载
  • 长连接与短连接
  • 我的工具连接
  • mongodb 安装配置
  • nginx 安装配置
  • Win7 家庭版远程连接问题
  • mysql 表结构文档整理
  • mysql分组获取最大时间的数据
  • CentOS7 查找应用名称并关闭进程的定时任务
  • CentOS7 yum安装步骤
  • JavaScript-如何实现克隆(clone)函数
  • Android开源项目规范总结
  • mysql 数据库四种事务隔离级别
  • React16时代,该用什么姿势写 React ?
  • select2 取值 遍历 设置默认值
  • spring + angular 实现导出excel
  • 创建一种深思熟虑的文化
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 将回调地狱按在地上摩擦的Promise
  • 前端临床手札——文件上传
  • 微服务入门【系列视频课程】
  • 微信小程序开发问题汇总
  • 湖北分布式智能数据采集方法有哪些?
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • #100天计划# 2013年9月29日
  • #etcd#安装时出错
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (2)从源码角度聊聊Jetpack Navigator的工作流程
  • (5)STL算法之复制
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (算法)区间调度问题
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (转)Mysql的优化设置
  • .gitignore文件使用
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .net Stream篇(六)
  • .NET 表达式计算:Expression Evaluator
  • .net 流——流的类型体系简单介绍
  • .net 无限分类
  • .NET 中使用 Mutex 进行跨越进程边界的同步