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. Windows Server 2012 虚拟化实战:存储(二)

    五.搭建Window Server 2012虚拟化的存储网络 前文我们讨论了Window Server 2012支持的各种与存储相关的技术,接下来我们通过实践对其中的一些技术进行检验.实际上Windo ...

  2. exynos4412中断编程

    中断概述 我们知道,ARM核能处理的异常有7种,但仅仅区分异常的种类显然不能够满足需求.拿手机来说,触摸屏幕和按下音量键可能都是irq异常,但是ARM并不能将他们区分开,而事实的情况是针对这两种中断, ...

  3. svn web页面管理svnadmin部署

    1.yum install subversion  创建svn目录  mdkir -p /data/svndirroot  建立svn库 svnadmin create /data/svndirroo ...

  4. [LeetCode] Mini Parser 迷你解析器

    Given a nested list of integers represented as a string, implement a parser to deserialize it. Each ...

  5. [LeetCode] Rising Temperature 上升温度

    Given a Weather table, write a SQL query to find all dates' Ids with higher temperature compared to ...

  6. 【已更新】【原创】Chrome53 最新版惊现无厘头卡死 BUG!

    发现问题 今天有客户向我们反馈了一个BUG:一个页面在IE.FireFox.Chrome52中能正常运行,但是在最新版的Chrome53中显示不了??? 习惯性的,我们需要客户提供页面在浏览器中的HT ...

  7. 如何为Surface Dial设备开发自定义交互功能

    随着Surface Studio的发布,微软发布了与之相配套的外设硬件Surface Dial,用户可以将Surface Dail吸附在Surface Studio的屏幕上面,用旋转和点击的实体操作来 ...

  8. 学写js Calender控件

    好几个月没写博客了,一直在赶项目.项目现在终于处于稳定的状态,只是修修改改.作为后台程序员的我真是苦逼啊,从web到手机端接口我都得写,杂七杂八的事情...这两天终于闲下来了,没事儿看了一下关于js日 ...

  9. 51Nod 1278 相离的圆

    51Nod 1278 相离的圆 Link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1278 1278 相离的圆 基 ...

  10. 看完这篇让你对各种前端build工具不再懵逼!

    本文原标题为:我终于弄懂了各种前端build工具 译者:@Christian 译文:https://www.sdk.cn/news/5412 原文:https://medium.freecodecam ...