MD5工具类,提供字符串MD5加密(校验)、文件MD5值获取(校验)功能 :

package com.yzu.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import org.apache.commons.io.IOUtils; /**
* MD5工具类,提供字符串MD5加密(校验)、文件MD5值获取(校验)功能
*/
public class MD5Utils { /**
* 16进制字符集
*/
private static final char[] HEX_DIGITS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; /**
* 指定算法为MD5的MessageDigest
*/
private static MessageDigest messageDigest = null; /**
* 初始化messageDigest的加密算法为MD5
*/
static {
try {
messageDigest = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
} /**
* 获取文件的MD5值
*
* @param file
* 目标文件
* @return MD5字符串
*/
public static String getFileMD5String(File file) {
String ret = "";
FileInputStream in = null;
FileChannel ch = null; try {
in = new FileInputStream(file);
ch = in.getChannel();
ByteBuffer byteBuffer = ch.map(FileChannel.MapMode.READ_ONLY, 0, file.length());
messageDigest.update(byteBuffer);
ret = bytesToHex(messageDigest.digest());
} catch (IOException e) {
e.printStackTrace();
} finally {
IOUtils.closeQuietly(ch, in);
} return ret;
} /**
*
* 获取文件的MD5值
*
* @param fileName
* 目标文件的完整名称
* @return MD5字符串
*/
public static String getFileMD5String(String fileName) {
return getFileMD5String(new File(fileName));
} /**
*
* MD5加密字符串
*
* @param str
* 目标字符串
* @return MD5加密后的字符串
*/
public static String getMD5String(String str) {
return getMD5String(str.getBytes());
} /**
*
* MD5加密以byte数组表示的字符串
*
* @param bytes
* 目标byte数组
* @return MD5加密后的字符串
*/
public static String getMD5String(byte[] bytes) {
messageDigest.update(bytes);
return bytesToHex(messageDigest.digest());
} /**
*
* 校验密码与其MD5是否一致
*
* @param pwd
* 密码字符串
* @param md5
* 基准MD5值
* @return 检验结果
*/
public static boolean checkPassword(String pwd, String md5) {
return getMD5String(pwd).equalsIgnoreCase(md5);
} /**
*
* 校验密码与其MD5是否一致
*
* @param pwd
* 以字符数组表示的密码
* @param md5
* 基准MD5值
* @return 检验结果
*/
public static boolean checkPassword(char[] pwd, String md5) {
return checkPassword(new String(pwd), md5);
} /**
*
* 检验文件的MD5值
*
* @param file
* 目标文件
*
* @param md5
* 基准MD5值
*
* @return 检验结果
*
*/
public static boolean checkFileMD5(File file, String md5) {
return getFileMD5String(file).equalsIgnoreCase(md5);
} /**
*
* 检验文件的MD5值
*
* @param fileName
* 目标文件的完整名称
*
* @param md5
* 基准MD5值
*
* @return 检验结果
*
*/
public static boolean checkFileMD5(String fileName, String md5) {
return checkFileMD5(new File(fileName), md5);
} /**
*
* 将字节数组转换成16进制字符串
*
* @param bytes
* 目标字节数组
*
* @return 转换结果
*
*/
public static String bytesToHex(byte bytes[]) {
return bytesToHex(bytes, 0, bytes.length);
} /**
*
* 将字节数组中指定区间的子数组转换成16进制字符串
*
* @param bytes
* 目标字节数组
*
* @param start
* 起始位置(包括该位置)
*
* @param end
* 结束位置(不包括该位置)
* @return 转换结果
*
*/
public static String bytesToHex(byte bytes[], int start, int end) {
StringBuilder sb = new StringBuilder(); for (int i = start; i < start + end; i++) {
sb.append(byteToHex(bytes[i]));
} return sb.toString();
} /**
* 双层加密的MD5值
* @param strSrc
*/
public static String getSimenMD5(String strSrc) {
String str1 = getMD5String(strSrc).toLowerCase(); StringBuffer str2 = new StringBuffer("");
str2.append(str1.substring(0, 2)).append("|")
.append(str1.substring(4, 10)).append("|")
.append(str1.substring(8, 21)).append("|")
.append(str1.substring(14, 19)).append("|")
.append(str1.substring(1, 9)).append("|")
.append(str1.substring(24, 27)); return getMD5String(str2.toString());
} /**
* 将单个字节码转换成16进制字符串
* @param bt
* 目标字节
* @return 转换结果
*/
public static String byteToHex(byte bt) {
return HEX_DIGITS[(bt & 0xf0) >> 4] + "" + HEX_DIGITS[bt & 0xf];
} public static void main(String[] args) throws IOException {
String fileName = "D:/javawed/debug.js";
String md5 = getFileMD5String(new File(fileName));
System.out.println(fileName+"文件MD5: "+md5); System.out.println(getSimenMD5("123456"));
}
}

MD5工具类,提供字符串MD5加密、文件MD5值获取(校验)功能的更多相关文章

  1. java http工具类和HttpUrlConnection上传文件分析

    利用java中的HttpUrlConnection上传文件,我们其实只要知道Http协议上传文件的标准格式.那么就可以用任何一门语言来模拟浏览器上传文件.下面有几篇文章从http协议入手介绍了java ...

  2. 写文件的工具类,输出有格式的文件(txt、json/csv)

    import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io. ...

  3. 【Java】通过DES加密和解密工具,对字符串进行加密和解密操作

    分享一个非常不错的字符串加密和解密的程序. 可以指定不同的密钥对同一字符串进行不同的加密操作,增强加密性能. Java代码如下: package com.app; import java.securi ...

  4. 反射工具类.提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class,被AOP过的真实类等工具函数.java

    import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.Validate; import org.ap ...

  5. 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 确的浮点数运算,包括加减乘除和四舍五入。

    package com.minxinloan.utils; import java.math.BigDecimal; public class Arith { // 源文件Arith.java: /* ...

  6. 通过CollectionUtils工具类判断集合是否为空,通过StringUtils工具类判断字符串是否为空

    通过CollectionUtils工具类判断集合是否为空 先引入CollectionUtils工具类: import org.apache.commons.collections4.Collectio ...

  7. java MD5工具类

    package com.common.tools; import java.security.MessageDigest; /** * MD5加密工具类 * <功能详细描述> * * @a ...

  8. MD5 工具类

    package com.payease.chains.risk.utils; /** * md5密码加密工具类 * Created by liuxiaoming on 2017/8/28. */ pu ...

  9. MD5工具类-详细

    public class MD5Code { /* * 下面这些S11-S44实际上是一个4*4的矩阵,在原始的C实现中是用#define 实现的, 这里把它们实现成为static * final是表 ...

随机推荐

  1. SQL*Plus环境下创建PLUSTRACE角色

    普通用户在SQL*Plus中开启AUTOTRACE报告时,遇到SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is ...

  2. shell——awk

    awk -F"分隔符" "command" filename awk -F":" '{print $1}' /etc/passwd 字段引用 ...

  3. shell 脚本之判断语句 if 详解

    使用 Linux 系统这么长时间,对 shell 脚本也算是比较熟悉.其实不管是搞开发,还是搞运维,shell 脚本都是必备的基本技能.这次抽时间好好总结一下 shell 方面的知识,综合的再学习一下 ...

  4. 无法安装Windows Live“OnCatalogResult:0x80190194”错误的解决方法

    今天想安装一个博客客户端,结果安装一直报错"OnCatalogResult:0x80190194",百度查到了解决发放再此记录下来,以备后用. 到官网下载了一个在线安装程序,可是一 ...

  5. 火狐浏览器URL中传中文参数乱码问题

    火狐浏览器:前端页面传中文 <span data-bind=" check_action:'roleMenuPriv'"> <a data-bind=" ...

  6. shell编程:定义简单标准命令集

    shell是用户操作接口的意思,操作系统运行起来后都会给用户提供一个操作界面,这个界面就叫shell,用户可以通过shell来调用操作系统内部的复杂实现,而shell编程就是在shell层次上进行编程 ...

  7. AJAX跨域调用ASP.NET MVC或者WebAPI服务的解决方案

    问题描述 当跨域(cross domain)调用ASP.NET MVC或者ASP.NET Web API编写的服务时,会发生无法访问的情况. 重现方式 使用模板创建一个最简单的ASP.NET Web ...

  8. cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'mvc:annotation-driven'.

    spring 配置文件报错报错信息:cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be ...

  9. Stream流

    在Node中,存在各式各样不同的数据流,Stream(流)是一个由不同对象实现的抽象接口.例如请求HTTP服务器的request是一个 流,类似于stdout(标准输出):包括文件系统.HTTP 请求 ...

  10. 时隔一年再读到the star

    The Star Arthur C. Clarke It is three thousand light-years to the Vatican. Once, I believed that spa ...