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

 获取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

 

你可能感兴趣的:(java获取文件MD5,获取字符串MD5)