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是表 ...
随机推荐
- python ldap
# -*- coding: UTF-8 -*- import ldap, ConfigParser, os from ldap import modlist LDAP_HOST = "myd ...
- android listview item取消按点击效果
设置android:listSelector="#00000000" 即可
- Mysql 的特殊之处
互联网公司一般都会选择在互联网得到广泛应用的Mysql,但之前一直用微软的东东,包括数据库(MS SQLServer). 这不本以为切换数据库so easy,但是还是有些细节需要注意. 数据类型 Da ...
- Azure上的几个坑
此文用于记录在使用Azure中国版时遇到的一些“坑”. 1.虚拟机备份/还原 在某些场景中,使用备份/还原功能来创建(克隆)虚拟机比使用capture的image要方便很多.虚拟机备份后,执行还原操作 ...
- eclipse启动优化,终于不那么卡了!
eclipse启动优化,终于不那么卡了! 网上找了好多都是myEclipse的优化的,跟eclipse有点区别,找了很多方法还是不能让这个eclipse(Version: Kepler Release ...
- 【译】什么是 web 框架?
Web 应用框架,或者简单的说是“Web 框架”,其实是建立 web 应用的一种方式.从简单的博客系统到复杂的富 AJAX 应用,web 上每个页面都是通过写代码来生成的.我发现很多人都热衷于学习 w ...
- BZOJ 1251: 序列终结者 [splay]
1251: 序列终结者 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 3778 Solved: 1583[Submit][Status][Discu ...
- [No00008F]PLSQL自动登录,记住用户名密码&日常使用技巧
配置启动时的登录用户名和密码 这是个有争议的功能,因为记住密码会给带来数据安全的问题. 但假如是开发用的库,密码甚至可以和用户名相同,每次输入密码实在没什么意义,可以考虑让PLSQL Develope ...
- flex自适应高度内容高度超出容器高度自动出现滚动条的问题
在容器中设置 flex-grow:2; overflow-y:auto;overflow-x:hidden;容器高度自适应. 内容高度不固定,无法出现滚动条,然后在容器中添加height:0,出现滚动 ...
- [LeetCode] Find Minimum in Rotated Sorted Array 寻找旋转有序数组的最小值
Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 migh ...