java实现计算MD5

import java.io.FileInputStream;
import java.security.DigestInputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5Class {
    // 计算字符串的MD5
    public static String conVertTextToMD5(String plainText) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(plainText.getBytes());
            byte b[] = md.digest();

            int i;

            StringBuffer buf = new StringBuffer("");
            for (int offset = 0; offset < b.length; offset++) {
                i = b[offset];
                if (i < 0)
                    i += 256;
                if (i < 16)
                    buf.append("0");
                buf.append(Integer.toHexString(i));
            }
            // 32位加密
            return buf.toString();
            // 16位的加密
            // return buf.toString().substring(8, 24);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return null;
        }

    }
  //计算文件的MD5,支持4G一下的文件(文件亲测,大文件未亲测)
    public static String conVertFileToMD5(String inputFilePath) {
        int bufferSize = 256 * 1024;

        FileInputStream fileInputStream = null;

        DigestInputStream digestInputStream = null;

        try {

            // 拿到一个MD5转换器(同样,这里可以换成SHA1)

            MessageDigest messageDigest = MessageDigest.getInstance("MD5");

            // 使用DigestInputStream

            fileInputStream = new FileInputStream(inputFilePath);

            digestInputStream = new DigestInputStream(fileInputStream,
                    messageDigest);

            // read的过程中进行MD5处理,直到读完文件

            byte[] buffer = new byte[bufferSize];

            while (digestInputStream.read(buffer) > 0)
                ;

            // 获取最终的MessageDigest

            messageDigest = digestInputStream.getMessageDigest();

            // 拿到结果,也是字节数组,包含16个元素

            byte[] resultByteArray = messageDigest.digest();

            // 同样,把字节数组转换成字符串

            return byteArrayToHex(resultByteArray);

        } catch (Exception e) {

            return null;

        } finally {

            try {

                digestInputStream.close();

            } catch (Exception e) {

            }

            try {

                fileInputStream.close();

            } catch (Exception e) {

            }

        }
    }

    private static String byteArrayToHex(byte[] byteArray) {

        // 首先初始化一个字符数组,用来存放每个16进制字符

        char[] hexDigits = { ‘0‘, ‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘, ‘8‘, ‘9‘,
                ‘A‘, ‘B‘, ‘C‘, ‘D‘, ‘E‘, ‘F‘ };

        // new一个字符数组,这个就是用来组成结果字符串的(解释一下:一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方))

        char[] resultCharArray = new char[byteArray.length * 2];

        // 遍历字节数组,通过位运算(位运算效率高),转换成字符放到字符数组中去

        int index = 0;

        for (byte b : byteArray) {

            resultCharArray[index++] = hexDigits[b >>> 4 & 0xf];

            resultCharArray[index++] = hexDigits[b & 0xf];

        }

        // 字符数组组合成字符串返回

        return new String(resultCharArray);
    }

    public static void main(String[] args) {
        // 测试
        System.out.println(MD5Class.conVertTextToMD5("hello"));
        System.out
                .println(conVertFileToMD5("C:\\Users\\administrator1\\Downloads\\StarUML-v2.8.0.msi"));
    }
}
时间: 2024-08-28 21:06:58

java实现计算MD5的相关文章

java加密算法小结--MD5加密算法

上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇来整理一下一个被广泛应用的加密算法---MD5. 简单了解 MD5(Message Digest Algorithm 5),翻译过来是消息摘要算法第五版,按照惯例,我们推理可能也有MD2,MD3这样名字的历史版本.. 即使完全不了解这个算法的原理,我们也可以从命名中看出一些眉道,所谓摘要,就是一个简短的概括,像我写过的毕业论文,上来第一部分就是摘要,它对后面长篇大论的文章做了一个简短有力的概

java.security 生成MD5

package com.tylor.util; import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; /** * @author tylor * 2017年8月23日 */ public class Md5Util { public static String getMD5(String str) { try { // 生成一个

Java 语言实现 MD5 加密

Java 语言实现 MD5 加密 背景说明 在实际项目中,为了安全性考虑,经常要求账号密码是以加密后的密文形式,保存到数据库中. 这样,即使有人获取到了数据库中的密文密码,也不知道明文密码信息是什么,从而防止系统被恶意访问. 密码加密有很多种方式,比如:Base64,DSA,RSA,MD5,SHA128,SHA256,SHA512等加密方式. 本文主要讲述 MD5 加密方式. MD5 简介 MD5 消息摘要算法(英文:MD5 Message-Digest Algorithm),一种被广泛使用的密

java基础 计算今天距本月最后一天还剩多少天

Calendar  c = new GregorianCalendar();   //GregorianCalendar 是Calendar的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统. GredorianCalendar 是一种混合日历,可由调用者通过调用setGregorianChange()来更改起始日期. Calendar c = new  Calendar.getInstance(TimeZone.getTimeZone("GMT+08:OO"));  //

收集的Java科学计算库

将数学.物理.生物.航天.经济学等的计算集成到单一系统架构,提供了细致全面的计算系统. 科学计算框架 Catalano http://www.oschina.net/p/catalano Catalano Framework 是一个 Java 和 Android 的科学计算框架. 主要计算功能: 图像处理 模糊逻辑 数学计算 统计 机器学习 神经网络 科学计算可移植扩展工具包 PETSc http://www.oschina.net/p/petsc PETSc(Portable, Extensi

java为啥计算时间从1970年1月1日开始

http://www.myexception.cn/program/1494616.html ---------------------------------------------------------- java为什么计算时间从1970年1月1日开始 今天在看Python  API 时,看到 time 模块 : The epoch is the point where the time starts. On January 1st of that year, at 0 hours,the

java 短连接+MD5加密短链接

java 短连接+MD5加密短链接 import java.security.MessageDigest; public class ShotUrlUtil { public static void main(String[] args) { System.out.println(shortUrl("http://www.baidu.com/")); } public static String shortUrl(String url) { String[] chars = new S

Java精确计算

Java精确计算 如果我们编译运行下面这个程序会看到什么? public class Test{ public static void main(String args[]){ System.out.println(0.05+0.01); System.out.println(1.0-0.42); System.out.println(4.015*100); System.out.println(123.3/100); } } 你没有看错!结果确实是 0.060000000000000005 0

java double 计算损失精度

计算double类型的数时有时候会多出0.000000001,会有不确定个数的0,在计算时将其转为BigDecimal就不会出错. BigDecimal sum = new BigDecimal(0.0);                BigDecimal tmp = new BigDecimal(0.0);                for(int i=0; i<list.size(); i++){                    tmp = new BigDecimal(list