java获取文件MD5,获取字符串MD5

本文详细介绍了通过四个步骤获取MD5值的过程,并提供了用于生成字符串和文件MD5值的Java工具类实现。从创建MessageDigest对象,更新数据,生成摘要到转换为MD5值,文章覆盖了所有关键环节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 获取md5值4个步骤:

1.创建MessageDigest对象md5。

2.使用md的update(byte[] buffer)方法将数据更新到md5对象中。

3.使用md5的digest()方法获得摘要,该摘要是一个长度为16的数组。

4.将该摘要数组转换为32位的md5值.

注意:如果要获得16位的md5值就是取32位的md5值的中间16位。可以使用subString(8,24)截取。

 

 

以下是获得文件和字符串md5的方法,去除main方法即可作为一个工具类。

package com.wenba1314.tools;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5Tool {
    private static MessageDigest md;
    static {
        try {
            //初始化摘要对象
            md = MessageDigest.getInstance("md5");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) throws IOException {
        System.out.println(generateMD5ForString("test"));
        System.out.println(generateMD5ForFile(new File("1.jpg")));

    }
    //获得字符串的md5值
    public static String generateMD5ForString(String str){
        //更新摘要数据
        md.update(str.getBytes());
        //生成摘要数组
        byte[] digest = md.digest();
        //清空摘要数据,以便下次使用
        md.reset();
        return formatByteArrayTOString(digest);
    }
    //获得文件的md5值
    public static String generateMD5ForFile(File file) throws IOException {
        //创建文件输入流
        FileInputStream fis = new FileInputStream(file);
        //将文件中的数据写入md对象
        byte[] buffer = new byte[1024];
        int len=-1;
        while ((len = fis.read(buffer)) != -1) {
            md.update(buffer, 0, len);
        }
        fis.close();
        //生成摘要数组
        byte[] digest = md.digest();
        //清空摘要数据,以便下次使用
        md.reset();
        return formatByteArrayTOString(digest);
    }
    //将摘要字节数组转换为md5值
    public static String formatByteArrayTOString(byte[] digest) {
        //创建sb用于保存md5值
        StringBuffer sb = new StringBuffer();
        int temp;
        for (int i=0;i<digest.length;i++) {
            //将数据转化为0到255之间的数据
            temp=digest[i]&0xff;
            if (temp < 16) {
                sb.append(0);
            }
            //Integer.toHexString(temp)将10进制数字转换为16进制
            sb.append(Integer.toHexString(temp));
        }
        return sb.toString();
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值