夕辞

JAVA对字符串、文件MD5加密 | 夕辞夕辞

JAVA对字符串、文件MD5加密

在JAVA开发的过程中,我们会经常用到MD5加密,什么是MD5加密。

MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。

简单来说,我们输入后,根据算法,可以在代码里生成32位的字符串,我们也可以用这个来校验文件的合法性,经常玩游戏的知道,下载安装包后,游戏官网一般会提供MD5校验的工具,原理类似,下面就直接贴出代码,复制到项目里即可使用。

代码如下:

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5Util {
	
	private static MessageDigest messageDigest = null;

    static {
        try {
            messageDigest = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException nsaex) {
        }
    }
    
	public final static String strMD5(String s) {
        char hexDigits[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};       
        try {
            byte[] btInput = s.getBytes();
            MessageDigest mdInst = MessageDigest.getInstance("MD5");
            mdInst.update(btInput);
            byte[] md = mdInst.digest();
            int j = md.length;
            char str[] = new char[j * 2];
            int k = 0;
            for (int i = 0; i < j; i++) { byte byte0 = md[i]; str[k++] = hexDigits[byte0 >>> 4 & 0xf];
                str[k++] = hexDigits[byte0 & 0xf];
            }
            return new String(str);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
	
	public static String fileMD5(InputStream is) {
        byte[] buffer = new byte[4096];
        int numRead;
        try {
            while ((numRead = is.read(buffer)) > 0) {
                messageDigest.update(buffer, 0, numRead);
            }
        } catch (IOException e) {
            return "";
        }
        BigInteger i = new BigInteger(1, messageDigest.digest());
        return String.format("%1$032X", i);
    }
	
	public static void main(String[] args) throws FileNotFoundException {
		System.out.println(MD5("123456"));
	}
}

用法很简单:

  1. 字符串:调用strMD5;
  2. 文件:转换为输入流,调用fileMD5;
2019年10月8日 / /
标签:  暂无标签
回到顶部