MD加密

MD5算法是典型的消息摘要算法,其前身有MD2、MD3和MD4算法,它由MD4、MD3和MD2算法改进而来。不论是哪一种MD算法,它们都需要获得一个随机长度的信息并产生一个123位的信息摘要。如果将这个128位的二进制摘要信息换算成十六进制,可以得到一个32位的字符串,故我们见到的大部分MD5算法的数字指纹都是32为十六进制的字符串。

MD算法家族的发展史:

MD2算法:

1989年,著名的非对称算法RSA发明人之一----麻省理工学院教授罗纳德.李维斯特开发了MD2算法。这个算法首先对信息进行数据补位,使信息的字节长度是16的倍数。再以一个16位的检验和做为补充信息追加到原信息的末尾。最后根据这个新产生的信息计算出一个128位的散列值,MD2算法由此诞生。

MD4算法:

1990年,罗纳德.李维斯特教授开发出较之MD2算法有着更高安全性的MD4算法。在这个算法中,我们仍需对信息进行数据补位。不同的是,这种补位使其信息的字节长度加上448个字节后成为512的倍数(信息字节长度mod 512 =448)。此外,关于MD4算的处理和MD2算法有很大的差别。但最终仍旧会获得一个128为的散列值。MD4算法对后续消息摘要算法起到了推动作用,许多比较有名的消息摘要算法都是在MD4算法的基础上发展而来的,如MD5、SHA-1、RIPE-MD和HAVAL算法等。

MD5算法:

1991年,继MD4算法后,罗纳德.李维斯特教授开发了MD5算法,将MD算法推向成熟。MD5算法经MD2、MD3和MD4算法发展而来,算法复杂程度和安全强度打打提高,但浙西MD算法的最终结果都是产生一个128位的信息摘要。这也是MD系列算法的特点。

一、java提供的MD2和MD5算法应用

[java] view plaincopyprint?

  1. package com.tao.test;
  2. import java.io.UnsupportedEncodingException;
  3. import java.security.MessageDigest;
  4. import javax.xml.bind.annotation.adapters.HexBinaryAdapter;
  5. /**
  6. * MD加密工具类
  7. */
  8. class MDCoder {
  9. // MD2加密
  10. public static String encodeMd2(byte[] data) throws Exception {
  11. // 初始化MessageDigest
  12. MessageDigest md = MessageDigest.getInstance("MD2");
  13. // 执行摘要信息
  14. byte[] digest = md.digest(data);
  15. // 将摘要信息转换为32位的十六进制字符串
  16. return new String(new HexBinaryAdapter().marshal(digest));
  17. }
  18. // MD5加密
  19. public static String encodeMd5(byte[] data) throws Exception {
  20. // 初始化MessageDigest
  21. MessageDigest md = MessageDigest.getInstance("MD5");
  22. // 执行摘要信息
  23. byte[] digest = md.digest(data);
  24. // 将摘要信息转换为32位的十六进制字符串
  25. return new String(new HexBinaryAdapter().marshal(digest));
  26. }
  27. }
  28. public class MDTest {
  29. public static void main(String[] args) throws UnsupportedEncodingException, Exception {
  30. String testString = "123456asdasdfsdfsdfsdf";
  31. System.out.println(MDCoder.encodeMd2(testString.getBytes()));
  32. System.out.println(MDCoder.encodeMd5(testString.getBytes()));
  33. }
  34. }

二、BouncyCastle补充的MD4算法的应用

[java] view plaincopyprint?

  1. package Test;
  2. import java.io.UnsupportedEncodingException;
  3. import java.security.MessageDigest;
  4. import java.security.Security;
  5. import org.bouncycastle.jce.provider.BouncyCastleProvider;
  6. import org.bouncycastle.util.encoders.Hex;
  7. /**
  8. * MD加密工具类
  9. */
  10. class MDCoder {
  11. // MD2加密
  12. public static String encodeMd4(byte[] data) throws Exception {
  13. //加入BouncyCastle的支持
  14. Security.addProvider(new BouncyCastleProvider());
  15. // 初始化MessageDigest
  16. MessageDigest md = MessageDigest.getInstance("MD4");
  17. //执行摘要信息
  18. byte[] digest=md.digest(data);
  19. //将摘要信息转换为32位的十六进制字符串
  20. return new String(Hex.encode(digest));
  21. }
  22. }
  23. public class MDTest {
  24. public static void main(String[] args) throws UnsupportedEncodingException, Exception {
  25. String testString="123456asdasdfsdfsdfsdf";
  26. String digestString=MDCoder.encodeMd4(testString.getBytes());
  27. System.out.println(digestString);
  28. }
  29. }

三、Commons Codec提供的实现

Commons Codec提供了消息摘要的工具类-----DigestUtils类。DigestUtils类是对Sun提供的MessageDigest类的一次封装,提供了MD5和SHA系列消息摘要算法的实现。

[java] view plaincopyprint?

  1. package Test;
  2. import java.io.UnsupportedEncodingException;
  3. import org.apache.commons.codec.binary.Hex;
  4. import org.apache.commons.codec.digest.DigestUtils;
  5. /**
  6. * MD加密工具类
  7. */
  8. class MDCoder {
  9. // MD5加密 返回十六进制的字符串
  10. public static String encodeMd5Hex(byte[] data) throws Exception {
  11. return DigestUtils.md5Hex(data);
  12. }
  13. // MD5加密,返回十进制的字节数组
  14. public static byte[] encodeMd5(byte[] data) {
  15. return DigestUtils.md5(data);
  16. }
  17. }
  18. public class MDTest {
  19. public static void main(String[] args) throws UnsupportedEncodingException, Exception {
  20. String testString = "123456asdasdfsdfsdfsdf";
  21. //十六进制的字符串
  22. String digestString = MDCoder.encodeMd5Hex(testString.getBytes());
  23. System.out.println(digestString);
  24. //字节数组
  25. byte[] digest=MDCoder.encodeMd5(testString.getBytes());
  26. String dString=new String(Hex.encodeHex(digest));
  27. System.out.println(dString);
  28. }
  29. }

实际应用中根据自己的选择用选择不同的方法来实现MD消息摘要算法

使用DigestUtils实现MD5加密最简单粗暴的方法:

导入包 commons-codec-1.4.jar

DigestUtils.md5Hex(str);//这样会得到一个加密后的字符串

over

原文:http://blog.csdn.net/lonelyroamer/article/details/7652320

时间: 2024-10-06 23:21:11

MD加密的相关文章

java加密解密研究6、MD算法家族

一.简述 MD5算法是典型的消息摘要算法,其前身有MD2.MD3和MD4算法,它由MD4.MD3和MD2算法改进而来.不论是哪一种MD算法,它们都需 要获得一个随机长度的信息并产生一个123位的信息摘要.如果将这个128位的二进制摘要信息换算成十六进制,可以得到一个32位的字符串,故我们见到的 大部分MD5算法的数字指纹都是32为十六进制的字符串. MD算法家族的发展史: MD2算法: 1989年,著名的非对称算法RSA发明人之一----麻省理工学院教授罗纳德.李维斯特开发了MD2算法.这个算法

ios 关于MD5 加密的32位与16位

在IOS开发过程中,为了保证数据的安全,我们通常要采取一些加密方法,常见的加密有Base64加密和MD5加密.Base64加密是可逆的,MD5加密目前来说一般是不可逆的.我们在开发一款App过程中,对于发的请求,其中有个“sign”的字段,这个key对应的value是MD5加密的字段,旁边的安卓同事问php后台,说MD5加密是32位的还是16位的,由于以前未曾注意过,所以就搜索了下,现在稍微总结下: MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传

java加密算法入门(一)-算法概念及单向加密

说起加密,我的第一印象就是电视剧各种密码本破解解密的场景,这两天在看加密相关的东西,做下笔记以便以后查看,也提供给大家个参考. 本文是java加密的第一篇,主要讲述下消息编码Base64以及简单的消息摘要算法MD5,SHA,MAC等,如果有不对的地方还望大家指正. 1.算法概念简述 1.1.加密算法分类 消息编码:Base64 消息摘要:MD类,SHA类,MAC 对称加密:DES,3DES,AES 非对称加密:RSA,DH密钥交换 数字签名:RSA signature,DSA signature

支付宝及时到帐接口使用详解

这两天写支付宝接口, 这个话题不新了, 因为很多人都 做过了, 在这里我说说我的看法吧, 先说一下实现 其实支付宝公司已经给我们做的很好了, 只要少量的改动就OK了,只是有的程序员不太明天他们的动作流程而以,我就以及时到帐为例子来说了,呵呵 在这之前就大家先下载一下c#版的及时到帐代码 先看一下程序的结构吧 支付宝有一个类文件叫 AliPay 是一些加密算法之类的东西,包括构造URL 要吧看一下这个类的全部内容 [C#] 纯文本查看 复制代码 ? 01 02 03 04 05 06 07 08

[接口] 支付宝及时到帐接口使用详解[转载]

这两天写支付宝接口, 这个话题不新了, 因为很多人都 做过了, 在这里我说说我的看法吧, 先说一下实现其实支付宝公司已经给我们做的很好了, 只要少量的改动就OK了,只是有的程序员不太明天他们的动作流程而以,我就以及时到帐为例子来说了,呵呵 在这之前就大家先下载一下c#版的及时到帐代码 这里是下载地址http://club.alipay.com/read-htm-tid-9976972.html先看一下程序的结构吧<ignore_js_op> 支付宝有一个类文件叫 AliPay 是一些加密算法之

Java爬虫模拟登录——不给我毛概二的H某大学

你的账号访问太频繁,请一分钟之后再试! 从大一开始 就用脚本在刷课 在专业课踢的只剩下一门C#的情况下 活活刷到一周的课 大二开始教务系统多了一个非常**的操作 退课池 and 访问频繁缓冲 难道,我大三下还要去学政治课咩? 虽然学政治不如敲代码 但我想毕业啊 emmmmmm 在量子力学的角度,没有抢上毛概的我只是我本体的一个属性,和我本身没有多大关系,我还是快乐敲代码吧. 0.教务系统后台登录流程 先来看一下后台账号密码在发送给服务器之前做了什么处理 这是文中的JS代码 1 j$(docume

脚本加密http://www.datsi.fi.upm.es/~frosal/sources/

shc的官网下载地址: http://www.datsi.fi.upm.es/~frosal/sources/ 安装: 复制代码 代码如下: tar xzvf shc-3.8.6.tgz cd shc-3.8.6 mkdir -p /usr/local/man/man1 这步是必须的,不然安装过程中会报错,shc将安装命令到/usr/local/bin/目录下: 将帮助文档存放在/usr/local/man/man1/目录下,如果系统中无此目录,安装时会报错,可创建此目录后再执行安装. 安装:

MD5加密和sha加密

sha加密原理Algorithm)又叫安全哈希加密技术,是当今世界最先近的加密算法.主要用于文件身份识别.数字签名和口令加密等. 对于明文信息A,通过SHA1算法,生成一条160位长的识别码B.且明文信息A和识别码B之间同时满足以下条件: 1.对于任意两条不同的明文信息A1.A2,其识别码B1.B2都不相同. 2.无法通过逆向算法由识别码B倒推出明文信息A. MOONCRM的用户密码采用SHA1加密存储,即服务器上存储的只是 由用户密码生成的识别码,而用户密码本身并没有存储在服务器上.用户输入登

MD5加密支付宝支付与微信支付

在做支付宝支付与微信支付时看到两家公司给的dom其中关于MD5加密的 支付宝的dom: DigestUtils.md5Hex(test).toUpperCase(); 微信的dom: private static String MD5(String sourceStr) throws UnsupportedEncodingException { String result = ""; try { MessageDigest md = MessageDigest.getInstance(