`
linuxstuding
  • 浏览: 1231124 次
文章分类
社区版块
存档分类
最新评论

java快速生成大文件的MD5算法[MD5Util.java]

 
阅读更多
package cn.hlgc.mail;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5Util {
/**
* 默认的密码字符串组合,apache校验下载的文件的正确性用的就是默认的这个组合
*/
protected static char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9','a', 'b', 'c', 'd', 'e', 'f' };
protected static MessageDigest messagedigest = null;
static{
try{
messagedigest = MessageDigest.getInstance("MD5");
}catch(NoSuchAlgorithmException nsaex){
System.err.println(MD5Util.class.getName()+"初始化失败,MessageDigest不支持MD5Util。");
nsaex.printStackTrace();
}
}

public static void main(String[] args) throws IOException {
long begin = System.currentTimeMillis();

File big = new File("E:/游戏/冲绳那霸.rar");

String md5=getFileMD5String(big);

long end = System.currentTimeMillis();
System.out.println("md5:"+md5+" time:"+((end-begin)/1000)+"s");
}

/**
* 适用于上G大的文件
* @param file
* @return
* @throws IOException
*/
public static String getFileMD5String(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 static String getMD5String(String s) {
return getMD5String(s.getBytes());
}

public static String getMD5String(byte[] bytes) {
messagedigest.update(bytes);
return bufferToHex(messagedigest.digest());
}

private static String bufferToHex(byte bytes[]) {
return bufferToHex(bytes, 0, bytes.length);
}

private static 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 static void appendHexPair(byte bt, StringBuffer stringbuffer) {
char c0 = hexDigits[(bt & 0xf0) >> 4];
char c1 = hexDigits[bt & 0xf];
stringbuffer.append(c0);
stringbuffer.append(c1);
}

public static boolean checkPassword(String password, String md5PwdStr) {
String s = getMD5String(password);
return s.equals(md5PwdStr);
}
}
分享到:
评论

相关推荐

    MD5Utils.java

    MD5 是message-digest algorithm 5 (信息-摘要算法)缩写,广泛用于加密和解密技术,常...不管文件多大,经过MD5后都能生成唯一的MD5值。好比现在的ISO校验,都是MD5校验。怎么用?当然是把ISO经过MD5后产生MD5的值。

    JAVA上百实例源码以及开源项目

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    JAVA上百实例源码以及开源项目源代码

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    邮件发送 poi 二维码 条形码等java常用的工具类

    FileOperater:文件处理工具类 包括 读取文本文件,写出文本文件, 大文件切分,文件下载,文件或文件夹比较,文件或文件夹遍历筛选 ...... HttpClientCard:http工具类 HttpUtil:http工具类 Identification:...

    eris:Java随机数生成器

    这是一个自以为是的新面貌java.util.Random API,按照Java编程目前最好的做法。功能和限制兼容插件:除非另有说明,否则所有算法在功能上均与原始参考实现等效并经过测试。 为性能而设计:实现在内部不提供任何线程...

    JAVA工具包大全

    提供AES算法、DES(3DES)算法、HD算法、HMAC算法、IDEA算法、MD算法、SHA算法。 cache(缓存包): 提供Ehcache缓存操作与管理的相关功能。 codec(编码包): 提供Base64编码、二进制编码、十六进制编码的...

    DRNG-Benchmark:确定性随机数生成器基准

    确定性随机数生成器基准 用法 确保已安装Java 6/7和ant,然后运行: ant init ant drng-bechmark 项目现场 抽象的 确定性随机数生成器(DRNG)...java.util.Random 梅森·扭曲者 512a井 井1024a 19937a井 井44497

    jedis使用指南

    在jedis的源码里发现了两种hash算法(MD5,MURMUR Hash(默认)),也可以自己实现redis.clients.util.Hashing接口扩展。 List&lt;JedisShardInfo&gt; hosts = new ArrayList(); //server1 JedisShardInfo host1 = new ...

    asuraframework-commons:封装第三方工具类,提供统一的工具类API

    提供统一的工具类API主要功能1、提供标准Json序列化,反序列化,处理2、时间处理,计算3、加密签名算法(MD5,SHA)4、常规算法(UUID生成,雪花(snowflake)算法,一致性Hash算法,轮循算法)5、escape(XSS , ...

Global site tag (gtag.js) - Google Analytics