MD5工具类,提供字符串MD5加密、文件MD5值获取(校验)功能
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值获取(校验)功能的更多相关文章
- java http工具类和HttpUrlConnection上传文件分析
利用java中的HttpUrlConnection上传文件,我们其实只要知道Http协议上传文件的标准格式.那么就可以用任何一门语言来模拟浏览器上传文件.下面有几篇文章从http协议入手介绍了java ...
- 写文件的工具类,输出有格式的文件(txt、json/csv)
import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io. ...
- 【Java】通过DES加密和解密工具,对字符串进行加密和解密操作
分享一个非常不错的字符串加密和解密的程序. 可以指定不同的密钥对同一字符串进行不同的加密操作,增强加密性能. Java代码如下: package com.app; import java.securi ...
- 反射工具类.提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class,被AOP过的真实类等工具函数.java
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.Validate; import org.ap ...
- 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 确的浮点数运算,包括加减乘除和四舍五入。
package com.minxinloan.utils; import java.math.BigDecimal; public class Arith { // 源文件Arith.java: /* ...
- 通过CollectionUtils工具类判断集合是否为空,通过StringUtils工具类判断字符串是否为空
通过CollectionUtils工具类判断集合是否为空 先引入CollectionUtils工具类: import org.apache.commons.collections4.Collectio ...
- java MD5工具类
package com.common.tools; import java.security.MessageDigest; /** * MD5加密工具类 * <功能详细描述> * * @a ...
- MD5 工具类
package com.payease.chains.risk.utils; /** * md5密码加密工具类 * Created by liuxiaoming on 2017/8/28. */ pu ...
- MD5工具类-详细
public class MD5Code { /* * 下面这些S11-S44实际上是一个4*4的矩阵,在原始的C实现中是用#define 实现的, 这里把它们实现成为static * final是表 ...
随机推荐
- 浅谈Linux内存管理机制
经常遇到一些刚接触Linux的新手会问内存占用怎么那么多?在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然.这是Linux内存管理的一个优秀特性,在这 ...
- java动态编译笔记
1 前言 Java的动态编译知识,真真在实际开发中并不是经常遇到.但是学习java动态编译有助于我们从更深一层次去了解java.对掌握jdk的动态代理模式,这样我们在学习其他一些开源框架的时候就能够知 ...
- grub2配置显示系统选择菜单(ubuntu 14.04)
背景: 有一次遇到过安装的新的内核后,ubuntu并没有显示选择内核的grub菜单,按shift键才会弹出,有时候shift按得不准就又进入了不是想进入的那个系统. 配置方法: sudo vim /e ...
- [LeetCode] Product of Array Except Self 除本身之外的数组之积
Given an array of n integers where n > 1, nums, return an array output such that output[i] is equ ...
- MATLAB 成对T检验(paired-ttest)
学过的统计知识忘光了,飞速恶补了一下能用到的,此篇多有错误今后看到再改= =||| 成对t检验(Paired ttest) 将两组测量值对应相减,再将所得差值看作服从正态分布的随机变量,然后再做关于差 ...
- Kinect for Windows SDK开发入门(十九):Kinect Fusion
Kinect for Windows SDK1.7中引入了Kinect Fusion功能.在1.8的SDK中对该功能进行了改进和强化,Kinect Fusion能够使得我们使用Kinect f ...
- .net 单点登录实践
前言 最近轮到我在小组晨会来分享知识点,突然想到单点登录,准备来分享下如何实现单点登录,所以有了下文.实现方案以及代码可能写得不是很严谨,有漏洞的地方或者错误的地方欢迎大家指正. 刚开始头脑中没有思路 ...
- 【转】iOS,搜索标签布局
前一阵时间,看过这样一个demo,代码不多,但是简洁易懂. 转自: // 代码地址: https://github.com/iphone5solo/PYSearch // 代码地址: http:/ ...
- Reactjs+Webpack+es2015 入门HelloWord(一)
链接,自己很久前总结的blog. https://my.oschina.net/tangyuanyu/blog/730265
- C# 常用代码
学习备忘 1.判断程序是否运行 static void Main() { bool canCreateNew; System.Threading.Mutex myownmutex = new Syst ...