MD5摘要(Java实现)

消息摘要算法又成散列算法,其核心在于散列函数的单向性。即通过散列函数可获得对应的散列值,但不可以通过散列值反推其原始信息。

消息摘要算法分为以下三大类:

MD(Message Digest ,消息摘要)

SHA(Secure Hash Algorithm ,安全散列算法)

MAC(Message Authentication Code ,消息认证码)

本篇文章仅说明MD5算法

MD系列算法包括MD2、MD4、MD5这三种算法

MD系统的消息摘要算法都产生128位的消息摘要,转换成16进制之后就是32位的16进制数。即16进制的MD5消息摘要都是32位的

Java自带的MessageDigest类(如果需要处理流的则使用DigestInputStream、DigestOutputStream)实现MD5摘要信息算法

注意:Java 自动的仅支持MD2和MD5


/**

* MD5消息摘要

* @throws Exception

*/

public static void md5Hex() throws Exception{

//获的MD5消息摘要

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

md5.update("中国".getBytes("utf-8"));

byte[] result = md5.digest();

//转换成16进制字符串,注意:转换成16进制不是MD5消息摘要中的步骤,所以它不是必须的

String hexString = toHexString(result);

System.out.println(hexString);

}

/**

* 将字节数组转换成16进制的字符串

* @param bytes

* @return

*/

public static String toHexString(byte[] bytes){

StringBuffer sb = new StringBuffer();

for(byte b: bytes){

String hex = Integer.toHexString(b & 0x0FF);

if(hex.length()==1) hex = "0" + hex;

sb.append(hex);

}

return sb.toString();

}  

通过Apache的消息摘要工具类org.apache.commons.codec.digest.DigestUtils实现

Apache的消息摘要工具类实际是对Java的MessageDigest类使用步骤的封装,简便了我们的开发

DigestUtils.md5Hex("中国".getBytes("utf-8"))

实现文件的MD5消息摘要计算

方案一、跟计算普通字符串的MD5值一样,使用MessageDigest类

public static void md5File2() throws Exception{

FileInputStream fis = new FileInputStream("f:\\T1-1_20140910_80070000.dat");

byte[]buffer = new byte[1024];

int count = -1;

ByteArrayOutputStream bout = new ByteArrayOutputStream();

while((count=fis.read(buffer))>-1){

bout.write(buffer, 0, count);

}

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

byte[] result = md5.digest(bout.toByteArray());

//打印出十六进制字符串

System.out.println(toHexString(result));

}

方案二、使用DigestInputStream类

public static void md5File1() throws Exception{

DigestInputStream dis = new DigestInputStream(new FileInputStream("f:\\T1-1_20140910_80070000.dat") ,MessageDigest.getInstance("MD5"));

byte[]buffer = new byte[1024];

while(dis.read(buffer)>-1){

}

MessageDigest md5 = dis.getMessageDigest();

byte[] result = md5.digest();

System.out.println(toHexString(result));

}

通过DigestInputStream类的read方法可以知道,其实使用DigestInputStream类实现的原理跟“方案一”是一样的。

它也是从文件流中读取字节,然后调用MessageDigest类的update方法更新进去的。下面是DigestInputStream类的read方法

public int read(byte[] b, int off, int len) throws IOException {

int result = in.read(b, off, len);

if (on && result != -1) {

digest.update(b, off, result);

}

return result;

}

来自为知笔记(Wiz)

时间: 2024-08-29 22:26:39

MD5摘要(Java实现)的相关文章

JAVA 生成 MD5摘要 和SHA1摘要 及MD5的彩虹表破解

MD5  和SHA1 这两个摘要算法,使用很普遍,几乎每个项目我们都会用这两个算法来骗自己和骗用户,看啊,我们保存的用户密码是加密的.对,存的不是明文,是密文.然而MD5真的安全么? 上干货 JAVA生成MD5摘要的代码: MessageDigest md5 =MessageDigest.getInstance("MD5");         String messageStr="123456";         md5.update(messageStr.getB

MD5加密Java版

MD5是一个安全的散列算法,输入两个不同的明文不会得到相同的输出值,根据输出值,不能得到原始的明文,即其过程不可逆:所以要解密MD5没有现成的算法,只能用穷举法,把可能出现的明文,用MD5算法散列之后,把得到的散列值和原始的数据形成一个一对一的映射表,通过比在表中比破解密码的MD5算法散列值,通过匹配从映射表中找出破解密码所对应的原始明文. import java.security.MessageDigest; public class Password { private final stat

利用Java自带的MD5加密java.security.MessageDigest;

MD5加密算法,即"Message-Digest Algorithm 5(信息-摘要算法)",它由MD2.MD3.MD4发展而来的一种单向函数算法(也就是HASH算法),它是国际著名的公钥加密算法标准RSA的第一设计者R.Rivest于上个世纪90年代初开发出来的.MD5的最大作用在于,将不同格式的大容量文件信息在用数字签名软件来签署私人密钥前"压缩"成一种保密的格式,关键之处在于——这种"压缩"是不可逆的. Java JDK已经自带了MD5的实

系统管理模块_用户管理1_实现用户有关的功能_测试功能、解决事务的问题、对密码进行MD5摘要

系统管理模块__用户管理1__实现用户有关的功能 了解用户管理要做什么(增删改查初始化密码) 设计实体 分析功能有几个对应几个请求 增删改查有6个请求,初始化密码一个 实现增删改查一组功能的步骤流程 一.做Action相关的准备: Action.JSP.配置 二.做Service相关的准备: 接口.实现类.配置 三.填空: Action方法.Service方法.JSP页面 实现一组功能的步骤(一) 以User为例: 一.做Action相关的准备 1,创建 MyAction extends Bas

用于对项目中密码生成MD5摘要和加盐的工具类

import java.security.MessageDigest; /** * 用于对项目中密码生成MD5摘要和加盐的工具类 * @author 彭锋 */ public final class MD5Util { private static final char[] hexadecimal = {'0','1','2','3','4','5','6', '7','8','9','a','b','c','d','e','f'}; /** * 根据指定的字符串,返回对应的MD5摘要结果 *

将32位MD5摘要串转换为128位二进制字符串

将32为MD5摘要串转换为128位二进制字符串: 1 /// <summary> 2 /// 将字符串转成二进制 3 /// </summary> 4 /// <param name="s">源字符串</param> 5 /// <returns>二进制串</returns> 6 internal static string ConvertStringToBinary(string s) 7 { 8 if (s.I

MD5加密--Java

MD5 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.该算法的文件号为RFC 1321(R.Rivest,MIT Laboratory for Computer Science and RSA Data Security Inc. April 1992). MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致.是计算机广泛使用的杂凑算法之

消息摘要java.security.MessageDigest

这是一种与消息认证码结合使用以确保消息完整性的技术.主要使用单向散列函数算法,可用于检验消息的完整性,和通过散列密码直接以文本形式保存等,目前广泛使用的算法有MD4.MD5.SHA-1,jdk1.5对上面都提供了支持,在java中进行消息摘要很简单, java.security.MessageDigest提供了一个简易的操作方法: /** *MessageDigestExample.java *Copyright 2005-2-16 */ import java.security.Message

MD5加密Java工具类

原文:http://www.open-open.com/code/view/1421764946296 import java.security.MessageDigest; public class MD5 { //公盐 private static final String PUBLIC_SALT = "demo" ; //十六进制下数字到字符的映射数组 private final static String[] hexDigits = {"0", "