Java 生成MD5

MD5(Message Digest Algorithm),消息摘要算法,一般用于校验文件的完整性。Java内置已经实现了MD5,与SHA1算法,利用java.security.MessageDigest类就可以获取文件/字符串的MD5或SHA1

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.security.DigestInputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; public class MD5AndSHA1Helper { /**
* 将字节数组转换为16进制字符串
* @param resultArr
* @return 16进制字符串
*/
private static String byteArrToHex(byte[] byteArr) {
// Initialize the character array, used to store each hexadecimal string
char[] hexDigits = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
// Initialize a char Array, used to form the result string
char[] resultCharArr = new char[byteArr.length*2];
// Traverse the byte array, converted into characters in a character array
int index = 0;
for (byte b : byteArr) {
resultCharArr[index++] = hexDigits[b>>> 4 & 0xf];
resultCharArr[index++] = hexDigits[b & 0xf];
}
return new String(resultCharArr);
} /**
* 获取字符串的MD5
* @param input
* @return
*/
public static String getStringMD5(String input){
try {
// get MD5 digest
MessageDigest mDigest = MessageDigest.getInstance("MD5");
// The input String to Byte Array
byte[] inputArr = input.getBytes();
// Updates the digest using the specified byte.
mDigest.update(inputArr);
// Completes the hash computation by performing final operations such as padding.
// The digest is reset after this call is made.
byte[] resultArr = mDigest.digest();
//
return byteArrToHex(resultArr);
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
} /**
* 获取文件的MD5,可以替换为SHA1
* @param inputFile
* @return
* @throws IOException
*/
@SuppressWarnings("resource")
public static String getFileMD5(String fileUrl) throws IOException{
int bufferSize = 1024*1024;
FileInputStream fileInputStream = null;
DigestInputStream digestInputStream = null;
try {
// 可以替换为"SHA1"
MessageDigest mDigest = MessageDigest.getInstance("MD5");
fileInputStream = new FileInputStream(fileUrl);
// Creates a digest input stream, using the specified input stream and message digest.
digestInputStream = new DigestInputStream(fileInputStream, mDigest);
byte[] buffer = new byte[bufferSize];
while(digestInputStream.read(buffer)>0);
mDigest = digestInputStream.getMessageDigest();
byte[] resultArr = mDigest.digest();
return byteArrToHex(resultArr);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}finally{
fileInputStream.close();
digestInputStream.close();
}
return null;
} /**
* 获取String的SHA1
* @param input
* @return
*/
public static String getStringSHA1(String input){
try {
MessageDigest mDigest = MessageDigest.getInstance("SHA1");
byte[] inputArr = input.getBytes();
mDigest.update(inputArr);
byte[] resultArr = mDigest.digest();
return byteArrToHex(resultArr); } catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
} public static void main(String[] args) {
// String result = MD5AndSHA1Helper.getStringMD5("111");
// String result = MD5AndSHA1Helper.getStringSHA1("1111");
String path = "/Users/Dream_Kidd/Downloads/wanda19environment-x64/apache-tomcat-7.0.62-windows-x64.zip";
String result;
try {
result = MD5AndSHA1Helper.getFileMD5(path);
System.out.println(result);
} catch (IOException e) {
e.printStackTrace();
} }
}

建议,如果过G的文件,不建议使用Java自带的MD5

Java MD5校验的更多相关文章

  1. Java MD5校验与RSA加密

    区别: MD5加密: 加密时通过原字符串加密成另一串字符串 解密时需要原加密字符串进行重新加密比较两次加密结果是否一致 RSA加密: 加密时通过原字符串生成密钥对(公钥+私钥) 解密时通过公钥和私钥进 ...

  2. Java 获取 文件md5校验码

    讯雷下载的核心思想是校验文件的md5值,两个文件若md5相同则为同一文件. 当得到用户下载某个文件的请求后它根据数据库中保留的文件md5比对出拥有此文件的url, 将用户请求挂接到此url上并仿造一个 ...

  3. Java 自带MD5 校验文件

    http://www.iteye.com/topic/1127319 前天第一次发表博客到论坛,关于Java文件监控一文,帖子地址在:http://www.iteye.com/topic/112728 ...

  4. java生成MD5校验码

    在Java中,java.security.MessageDigest (rt.jar中)已经定义了 MD5 的计算,所以我们只需要简单地调用即可得到 MD5 的128 位整数.然后将此 128 位计 ...

  5. Java 读取网络资源文件 获取文件大小 MD5校验值

    Java 读取网络资源文件 获取文件大小 MD5校验值 封装一个文件操作工具类: package c; import java.io.*; import java.net.HttpURLConnect ...

  6. JAVA生成文件的md5校验值

    这里使用了lombok打印日志,也可以不用 import java.io.File; import java.io.FileInputStream; import java.io.IOExceptio ...

  7. Android MD5校验码的生成与算法实现

    在Java中,java.security.MessageDigest (rt.jar中)已经定义了 MD5 的计算,所以我们只需要简单地调用即可得到 MD5 的128 位整数.然后将此 128 位计 ...

  8. js和java MD5加密

    项目中用到js MD5加密和后台java MD5加密,刚开始加密后两个不一致,网上找了好久终于找到一个啦,记下来: md5.js /* * A JavaScript implementation of ...

  9. C# 获取文件MD5校验码

    using System; using System.IO; using System.Security.Cryptography; using System.Text; public class M ...

随机推荐

  1. bzoj 1069 [SCOI2007]最大土地面积(旋转卡壳)

    1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2277  Solved: 853[Submit][Stat ...

  2. [LeetCode] 3Sum 解题思路

    Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all un ...

  3. iOS/mac开发的一些知名个人博客

    王巍的博客:王巍目前在日本横滨任职于LINE.工作内容主要进行Unity3D开发,8小时之外经常进行iOS/Mac开发.他的陈列柜中已有多款应用,其中番茄工作法工具非常棒. http://onevca ...

  4. Oracle中分页查询语句

    Oracle分页查询语句使我们最常用的语句之一,下面就为您介绍的Oracle分页查询语句的用法,如果您对此方面感兴趣的话,不妨一看. Oracle分页查询语句基本上可以按照本文给出的格式来进行套用.O ...

  5. android关机充电

    1.关机充电其实是进入adb shell很快的方式! 2.手机关机时候插入USB,手机将进入关机充电模式,那么这个模式究竟是怎么进行的,这里分析如下! (1)uboot:这里代码大概浏览了一下:u-b ...

  6. leetcode 题解 || Swap Nodes in Pairs 问题

    problem: Given a linked list, swap every two adjacent nodes and return its head. For example, Given ...

  7. socket编程原理

    socket编程原理 1.问题的引入 1) 普通的I/O操作过程: UNIX系统的I/O命令集,是从Maltics和早期系统中的命令演变出来的,其模式为打开一读/写一关闭(open-write-rea ...

  8. RTB日志分析MR程序设计

    到新公司三个月了,上个月做的是Beacon项目,详细的设计思想还没有写文档.这两周开始搞Hadoop,开始阅读相关论文.开始编写MR程序.开始写java,大学时用java较多,工作后就一直在用c/c+ ...

  9. HDU2029JAVA

    Palindromes _easy version Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Jav ...

  10. oracle多表查询

    多表查询首先要避免笛卡尔集,要避免笛卡尔集,那么查询条件不得少于表的个数-1. 1.显示雇员名,雇员工资以及雇员所在的部门: 2.显示部门号为10的部门名.员工名和工资: 3.显示各个雇员的姓名,工资 ...