加密算法之 MD5算法
Posted ywjfx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了加密算法之 MD5算法相关的知识,希望对你有一定的参考价值。
题记:本人自测了很多次,该算法和apache的commons utils包中的MD5算法计算一致
一、针对文件内容生成MD5值
应用场景:针对文件,在传输过程由于网络原因丢帧或者被人别恶意篡改内容,可以通过源文件的MD5和下载后的文件MD5值进行比较,如果一致说明文件内容相同,否则下载的文件有问题。
该MD5代码计算这个文件内容,生成一个MD5值。
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5Util { /** * 一次性处理的文件字节数 */ private static final int ONE_HANDLE_FILE_BYTE_COUNT = 8192; /** * MD5 算法 */ private static final String MD5_ALGORITHM = "MD5"; /** * 无数据的索引值 */ private static final int NOT_DATA_INDEX = -1; /** * 正数符号 */ private static final int POSITIVE_SIGN = 1; /** * 十六进制 */ private static final int HEXADECIMAL = 16; /** * 生成文件内容的 MD5 值 * * @param file * @return */ public static String generateMD5(File file) { if (!file.isFile())//不是文件 return null; MessageDigest digest; FileInputStream in = null; byte buffer[] = new byte[ONE_HANDLE_FILE_BYTE_COUNT]; int len; try { digest = MessageDigest.getInstance(MD5_ALGORITHM); in = new FileInputStream(file); while ((len = in.read(buffer)) != NOT_DATA_INDEX) { digest.update(buffer, 0, len); } BigInteger bigInteger = new BigInteger(POSITIVE_SIGN, digest.digest()); return bigInteger.toString(HEXADECIMAL); } catch (NoSuchAlgorithmException e) { //logger.error(" 生成文件内容的 MD5", e); e.printStackTrace(); return null; } catch (FileNotFoundException e) { //logger.error(" 生成文件内容的 MD5", e); e.printStackTrace(); return null; } catch (IOException e) { // logger.error(" 生成文件内容的 MD5", e); e.printStackTrace(); return null; } finally { try { in.close(); } catch (Exception e) { e.printStackTrace(); // logger.error("关闭文件", e); } } } /* public static void main (String[]args){ String md5 = MD5Util.generateMD5( new File("D:\\ip_20180823102738.txt")); System.out.println(md5); }*/ }
二、针对字符串生成MD5值
应用场景:参数传输,保证参数的一致性
这里采用apache的commons包中的MD5工具类计算。
import org.apache.commons.codec.digest.DigestUtils; public class MD5Util { public static void main (String[]args){ String md5Test="MD5摘要算法"; System.out.println(md5Test); String md5Hex = DigestUtils.md5Hex(md5Test); #使用工具类对字符串生成MD5值 System.out.print(md5Hex); } }
Apache的commons包下载地址:http://commons.apache.org/proper/commons-codec/download_codec.cgi
##想了解更多加密算法,可以看https://www.cnblogs.com/ywjfx/p/9902628.html
以上是关于加密算法之 MD5算法的主要内容,如果未能解决你的问题,请参考以下文章