/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package gameminaserver.tools;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
*
* @author Administrator
*/
public class MD5Util {
/**
* 默认的密码字符串组合,用来将字节转换成 16 进制表示的字符,apache校验下载的文件的正确性用的就是默认的这个组合
*/
protected char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6',
'7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
protected MessageDigest messagedigest = null;
{
try {
messagedigest = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException nsaex) {
System.err.println(MD5Util.class.getName()
+ "初始化失败,MessageDigest不支持MD5Util。");
nsaex.printStackTrace();
}
}
/**
* 生成字符串的md5校验值
*
* @param s
* @return
*/
public String getMD5String(String s) {
return getMD5String(s.getBytes());
}
/**
* 判断字符串的md5校验码是否与一个已知的md5码相匹配
*
* @param password 要校验的字符串
* @param md5PwdStr 已知的md5校验码
* @return
*/
public boolean checkPassword(String password, String md5PwdStr) {
String s = getMD5String(password);
return s.equals(md5PwdStr);
}
/**
* 生成文件的md5校验值
*
* @param file
* @return
* @throws IOException
*/
public String getFileMD5String(File file) throws IOException {
InputStream fis;
fis = new FileInputStream(file);
byte[] buffer = new byte[1024];
int numRead = 0;
while ((numRead = fis.read(buffer)) > 0) {
messagedigest.update(buffer, 0, numRead);
}
fis.close();
return bufferToHex(messagedigest.digest());
}
/**
* JDK1.4中不支持以MappedByteBuffer类型为参数update方法,并且网上有讨论要慎用MappedByteBuffer,
* 原因是当使用 FileChannel.map 方法时,MappedByteBuffer 已经在系统内占用了一个句柄,
* 而使用 FileChannel.close 方法是无法释放这个句柄的,且FileChannel有没有提供类似 unmap 的方法,
* 因此会出现无法删除文件的情况。
*
* 不推荐使用
*
* @param file
* @return
* @throws IOException
*/
public String getFileMD5String_old(File file) throws IOException {
FileInputStream in = new FileInputStream(file);
FileChannel ch = in.getChannel();
MappedByteBuffer byteBuffer = ch.map(FileChannel.MapMode.READ_ONLY, 0,
file.length());
messagedigest.update(byteBuffer);
return bufferToHex(messagedigest.digest());
}
public String getMD5String(byte[] bytes) {
messagedigest.update(bytes);
return bufferToHex(messagedigest.digest());
}
private String bufferToHex(byte bytes[]) {
return bufferToHex(bytes, 0, bytes.length);
}
private String bufferToHex(byte bytes[], int m, int n) {
StringBuffer stringbuffer = new StringBuffer(2 * n);
int k = m + n;
for (int l = m; l < k; l++) {
appendHexPair(bytes[l], stringbuffer);
}
return stringbuffer.toString();
}
private void appendHexPair(byte bt, StringBuffer stringbuffer) {
char c0 = hexDigits[(bt & 0xf0) >> 4];// 取字节中高 4 位的数字转换, >>> 为逻辑右移,将符号位一起右移,此处未发现两种符号有何不同
char c1 = hexDigits[bt & 0xf];// 取字节中低 4 位的数字转换
stringbuffer.append(c0);
stringbuffer.append(c1);
}
//
// public void main(String[] args) throws IOException {
// long begin = System.currentTimeMillis();
//
// File file = new File("C:/12345.txt");
// String md5 = getFileMD5String(file);
//
// // String md5 = getMD5String("a");
//
// long end = System.currentTimeMillis();
// System.out.println("md5:" + md5 + " time:" + ((end - begin) / 1000) + "s");
// }
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论

















收起资源包目录































































共 40 条
- 1

mars5337
- 粉丝: 28
- 资源: 29
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- Matlab Simulink下的动态电压恢复器(DVR)模型 1.0版:精准治理电压暂降、暂升与不平衡短路问题,适用于IEEE 33节点等模型,仿真时长0.7秒 ,Matlab Simulink质量
- BMS生产方案:支持多种锂电池,灵活串数,蓝牙APP控制,快速投入生产,BMS生产方案:多种锂电池兼容,智能蓝牙APP控制,快速生产启动,高效稳定串数可调,BMS生产方案,有3-32串,支持各种锂电池
- Maxwell方程与静电场电位分布的深入探讨,Maxwell静电场电位分布详解:理论、模型与实际应用,maxwell静电场电位分布 ,maxwell; 静电场; 电位分布,Maxwell方程下静电场电
- mingw-v10自取
- 大功率H桥电机驱动板电路设计方案:采用IR2103芯片驱动,双路电机控制,高速光耦隔离信号,最大额定电流达百安培,全套方案包括原理图、PCB、BOM表、测试程序等 ,大功率直流电机驱动板电路设计方案:
- 基于Dougff与Unitire轮胎模型的爆胎动力学建模与Carsim联合仿真研究,基于Dougff与Unitire轮胎模型的爆胎动力学建模与Carsim联合仿真研究:8自由度车辆轮爆分析,自己搭的爆
- (源码)基于Spring Boot和WebSocket的服装定制商城.zip
- (源码)基于Python的微信智能机器人.zip
- (源码)基于Arduino的AM2305温湿度传感器读取库.zip
- (源码)基于STM32的EVE2 Arduino库.zip
- (源码)基于C语言的字符串匹配算法测试项目.zip
- (源码)基于Embedded C++的ATMega32A键盘锁系统.zip
- (源码)基于ESP8266和W5500的物联网配置系统.zip
- (源码)基于STM32F10x微控制器的12864LCD串行显示项目.zip
- (源码)基于Python和PyQt5的图形面积计算器.zip
- (源码)基于Unreal Engine的多人游戏插件系统.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制

- 1
- 2
- 3
前往页