读书人

MD5的工具步骤使用

发布时间: 2012-08-28 12:37:01 作者: rapoo

MD5的工具方法使用

package com.cdl.test;import java.security.MessageDigest;import java.util.Arrays;/** * 功能:测试MessageDigest的MD5<BR> * 参考:http://apps.hi.baidu.com/share/detail/20189800<BR> * http://zhidao.baidu.com/question/163063912.html<BR> * @author ocaicai@yeah.net<BR> * @date 2011-12-7<BR> * @version 1.0 <BR> *  */public class TestMD5 {/** * @param args */public static void main(String[] args) throws Exception {String md5 = getMD5Mask("cdl");System.out.println(md5);/** * 输出结果:<BR> * [11, 29, -82, -22, -37, -62, 17, 60, -93, 96, 38, 93, -58, 0, -91,14]<BR> * 0b 1d ae ea db c2 11 3c a3 60 26 5d c6 00 a5 0e * */}/** * 1. byte(8位有符号)的取值范围是 -128-127, char(16位无符号)的取值范围是0-65535;<BR> * 2.如果一个byte对应的十六进制数只有一位前面要用0填充,因为MD5是32位的,达到统一的格式<BR> * 3.0x是十六进制的标示,比如:0xFF表示8位的二进制1111 1111;0x00FF表示16位的二进制0000 0000 1111 1111 * */public static String getMD5Mask(String str) throws Exception {MessageDigest messageDigest = null;// 获得一个肚子messageDigest = MessageDigest.getInstance("MD5");// 把肚子清空messageDigest.reset();// 在肚子里放入东西messageDigest.update(str.getBytes("UTF-8"));// 消化放入的东西得到目标营养byte[] byteArray = messageDigest.digest();System.out.println(Arrays.toString(byteArray));StringBuffer md5StrBuff = new StringBuffer();for (int i = 0; i < byteArray.length; i++) {if (Integer.toHexString(0xFF & byteArray[i]).length() == 1)md5StrBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i]));elsemd5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));}return md5StrBuff.toString();}}



添加一个查看byte二进制位的功能
package com.cdl.test;import java.security.MessageDigest;import java.util.Arrays;/** * 功能:测试MessageDigest的MD5<BR> * 参考:http://apps.hi.baidu.com/share/detail/20189800 *  * @author ocaicai@yeah.net<BR> * @date 2011-12-7<BR> * @version 1.0 <BR> *  */public class TestMD5 {/** * @param args */public static void main(String[] args) throws Exception {String md5 = getMD5Mask("cdl");System.out.println(md5);/** * 输出结果:<BR> * [11, 29, -82, -22, -37, -62, 17, 60, -93, 96, 38, 93, -58, 0, -91,14]<BR> * 0b 1d ae ea db c2 11 3c a3 60 26 5d c6 00 a5 0e * */}/** * 参考:http://zhidao.baidu.com/question/163063912.html<BR> * 1. byte(8位有符号)的取值范围是 -128-127, char(16位无符号)的取值范围是0-65535,<BR> * 所以需要& 0xFF 使得byte原来的负值变成正的;<BR> * 2.如果一个byte对应的十六进制数只有一位前面要用0填充,因为MD5是32位的,达到统一的格式<BR> * 3.0x是十六进制的标示,比如:0xFF表示8位的二进制1111 1111;0x00FF表示16位的二进制0000 0000 1111 1111 * */public static String getMD5Mask(String str) throws Exception {MessageDigest messageDigest = null;// 获得一个肚子messageDigest = MessageDigest.getInstance("MD5");// 把肚子清空messageDigest.reset();// 在肚子里放入东西messageDigest.update(str.getBytes("UTF-8"));// 消化放入的东西得到目标营养byte[] byteArray = messageDigest.digest();System.out.println(Arrays.toString(byteArray));StringBuffer md5StrBuff = new StringBuffer();String bitArray = null;for (int i = 0; i < byteArray.length; i++) {bitArray = Integer.toBinaryString(byteArray[i]);if (bitArray.length() > 8) {System.out.println(bitArray.substring(24));} elseSystem.out.println(bitArray);if (Integer.toHexString(0xFF & byteArray[i]).length() == 1)md5StrBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i]));elsemd5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));}return md5StrBuff.toString();}}


输出:
[11, 29, -82, -22, -37, -62, 17, 60, -93, 96, 38, 93, -58, 0, -91, 14]101111101101011101110101011011011110000101000111110010100011110000010011010111011100011001010010111100b1daeeadbc2113ca360265dc600a50e







.

读书人网 >编程

热点推荐