`

Java中的MD5信息摘要算法

 
阅读更多

所谓MD5,即"Message-Digest Algorithm 5(信息-摘要算法)",它由MD2、MD3、MD4发展而来的一种单向函数算法(也就是HASH算法),它是国际著名的公钥加密算法标准RSA的第一设计者R.Rivest于上个世纪90年代初开发出来的。MD5的最大作用在于,将不同格式的大容量文件信息在用数字签名软件来签署私人密钥前"压缩"成一种保密的格式,关键之处在于——这种"压缩"是不可逆的。 
为了让读者朋友对MD5的应用有个直观的认识,笔者以一个比方和一个实例来简要描述一下其工作过程: 
大家都知道,地球上任何人都有自己独一无二的指纹,这常常成为公安机关鉴别罪犯身份最值得信赖的方法;与之类似,MD5就可以为任何文件(不管其大小、格式、数量)产生一个同样独一无二的"数字指纹",如果任何人对文件做了任何改动,其MD5值也就是对应的"数字指纹"都会发生变化。 
我们常常在某些软件下载站点的某软件信息中看到其MD5值,它的作用就在于我们可以在下载该软件后,对下载回来的文件用专门的软件(如Windows MD5 Check等)做一次MD5校验,以确保我们获得的文件与该站点提供的文件为同一文件。利用MD5算法来进行文件校验的方案被大量应用到软件下载站、论坛数据库、系统文件安全等方面。 
笔者上面提到的例子只是MD5的一个基本应用,实际上MD5还被用于加密解密技术上,如Unix、各类BSD系统登录密码(在MD5诞生前采用的是DES加密算法,后因MD5安全性更高,DES被淘汰)、通信信息加密(如大家熟悉的即时通信软件MyIM)、数字签名等诸多方面。 
MD5将任意长度的“字节串”变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数。 
MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。举个例子,你将一段话写在一个叫 readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现(两个MD5值不相同)。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。 
MD5还广泛用于加密和解密技术上,在很多操作系统中,用户的密码是以MD5值(或类似的其它算法)的方式保存的, 用户Login的时候,系统是把用户输入的密码计算成MD5值,然后再去和系统中保存的MD5值进行比较,而系统并不“知道”用户的密码是什么。

 

	public static String md5(String str){
		String pwd = null;
		try {
			// 生成一个MD5加密计算摘要
			MessageDigest md = MessageDigest.getInstance("MD5");
			// 计算md5函数
			md.update(str.getBytes());
			// digest()最后确定返回md5 hash值,返回值为8为字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符
			// BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值
			pwd = new BigInteger(1, md.digest()).toString(16);
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
		return pwd;
	}

 

分享到:
评论
1 楼 cai21cn 2015-06-13  
算法有问题,会产生不可见字符,造成信息丢失

相关推荐

    MD5 信息摘要算法 java版

    java版 MD5 信息摘要算法 它的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。

    JAVA中MD5加密密码算法

    在Java编程语言中,MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,主要目的是为了产生一个固定长度的、不可逆的数字摘要,常用于存储密码。MD5算法将任意长度的输入(也叫做预映射,pre-image)通过...

    信息-摘要算法5(MD5)Java实现

    MD5主要是通过特定的hash散列方法将文本信息转换成简短的信息摘要,用以验证信息的完整性。一般用于数字签名。 用Java实现的一个例子。

    java实现MD5加密算法

    总结,Java实现MD5加密算法主要是通过`java.security.MessageDigest`类,经过`getInstance("MD5")`获取MD5实例,然后使用`digest()`和`update()`方法处理数据,最终将二进制摘要转换为十六进制字符串。尽管MD5的安全...

    Java实现MD5消息摘要算法

    Java实现MD5消息摘要算法 MD5消息摘要算法是一种不可逆的消息摘要算法,它可以将任意长度的输入数据转换为固定长度的输出数据。...在Java中,使用MD5消息摘要算法可以通过使用java.security.MessageDigest类来实现。

    MD5消息摘要算法

    MD5消息摘要算法,全称为Message-Digest Algorithm 5,是由美国计算机科学家Ronald Rivest在1991年设计的。它是一种广泛应用于数据校验、文件完整性验证的哈希函数,尤其在IT和网络安全领域中具有重要的地位。MD5...

    java的MD5算法

    - `java.security.MessageDigest`:提供消息摘要算法的接口。 - `java.security.NoSuchAlgorithmException`:当请求特定算法名称的Provider时找不到实现该算法的Provider会抛出此异常。 - `java.io....

    java调用MD5加密方式计算摘要值(有界面)

    这个类提供了对各种消息摘要算法的支持,包括MD5。以下是一个简单的示例,展示了如何使用Java调用MD5加密来计算一个字符串的摘要值: ```java import java.security.MessageDigest; import java.security....

    MD5摘要算法源码(java版)

    ### MD5摘要算法详解:Java实现 #### 一、引言 MD5(Message-Digest Algorithm 5)是一种广泛使用的密码散列函数,能够将任意长度的信息转化为一个固定长度(通常为128位)的散列值或摘要。这个摘要通常被用来验证...

    md5算法java

    ### MD5算法在Java中的实现 #### 一、概述 MD5(Message-Digest Algorithm 5)是一种广泛使用的散列算法,它能够将任意长度的数据转换为一个固定长度(通常是128位)的十六进制字符串。这种转换通常被称为“摘要”...

    MD5和RSA加密算法Java完成实现

    MD5和RSA是两种在计算机安全领域广泛应用的加密算法,它们在Java中有着广泛的实现。MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它将任意长度的数据转化为固定长度的摘要,通常为128位,通常表示为...

    MD5算法java篇

    ### MD5算法在Java中的实现 #### 一、概述 MD5(Message-Digest Algorithm 5)是一种广泛使用的散列函数,它能够将任意长度的数据转换为一个固定长度(通常是128位)的十六进制字符串。由于其计算速度快且结果不...

    matlab实现md5算法,md5算法详解,matlab

    总结来说,MATLAB实现MD5算法涉及的主要知识点包括:MD5算法的背景和用途,哈希函数的基本概念,MD5算法的四轮循环结构,FF、GG、HH、II四个非线性函数的作用,以及MATLAB中位运算和数组操作的应用。通过学习这个...

    MD5_java.rar_MD5 JAVA_java md5_md5_md5算法

    在Java编程语言中,MD5算法通常用于生成固定长度的128位(16字节)摘要,这个摘要通常以32位十六进制数字的形式呈现。 在给定的"MD5_java.rar"压缩包中,包含了两个文件:`MD5_java.java`和`www.pudn.com.txt`。`MD...

    JAVA实现MD5算法.rar

    这个"JAVA实现MD5算法.rar"压缩包包含了一个名为"MD5Util.java"的文件,我们可以从中学习如何在Java程序中实现MD5加密。 首先,MD5Util.java文件很可能定义了一个类`MD5Util`,这个类通常包含了一系列静态方法,以...

    MD5 算法的Java Bean

    本文档提供了一个MD5算法的Java Bean实现,该实现遵循了RFC1321中定义的标准。 ### MD5算法原理 MD5算法的核心是将输入数据转换成一系列的16字节块,并通过四轮复杂的运算得到最终的摘要。每一轮运算中包含了不同...

    MD5算法的Java实现类

    在Java中,实现MD5算法通常涉及到`java.security.MessageDigest`这个类。这个类提供了一种标准的方式来计算各种消息摘要,包括MD5。 下面我们将详细讨论MD5算法以及如何在Java中实现它。 MD5算法的核心思想是通过...

    md5_new.rar_MD5 JAVA_java md5_md5_加密算法

    在Java中实现MD5加密,主要依赖于java.security包下的MessageDigest类。以下是一个简单的MD5加密过程的步骤: 1. **导入必要的库**:首先,你需要导入`java.security.MessageDigest`和`java.math.BigInteger`库,...

    md.rar_MD-RBAC_MD5 JAVA_MD算法_md5_md5算法

    在给出的压缩包文件中,`md.txt`可能包含了使用上述Java MD5实现计算出的哈希值,而`www.pudn.com.txt`可能是从网站pudn.com下载的资料,可能包含有关MD5算法的进一步信息或者示例代码。 MD-RBAC(Role-Based ...

    MD5加密算法的JAVA实现

    本文将深入探讨MD5算法在Java中的实现方式,包括其原理、代码实现以及应用场景。 ### MD5算法原理 MD5(Message-Digest Algorithm 5)是由Ron Rivest于1992年设计的一种散列算法,用于将任意长度的消息压缩成一个...

Global site tag (gtag.js) - Google Analytics