这里有新鲜出炉的Java函数式编程,程序狗速度看过来!
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
这篇文章主要为大家详细介绍了java MD5加密实现过程,为大家分享了MD5加密代码,感兴趣的小伙伴们可以参考一下
先从下面这张图对MD5加密实现进行了解,具体如下
- package com.pb;
- import java.io.UnsupportedEncodingException;
- import java.security.MessageDigest;
- import java.security.NoSuchAlgorithmException;
- import java.util.Scanner;
- /*
- * 验证MD5
- * 1.初始化MessageDigest信息摘要对象
- * 2.传入需要计算的字符串更新摘要信息
- * 3.计算信息摘要
- * 4.将byte[] 转换为找度为32位的16进制字符串
- */
- public class MD5 {
- /*
- * 生成md5 有传入参数字符串
- */
- public void generateMD5(String input) {
- try {
- //1.初始化MessageDigest信息摘要对象,并指定为MD5不分大小写都可以
- MessageDigest md = MessageDigest.getInstance("md5");
- //2.传入需要计算的字符串更新摘要信息,传入的为字节数组byte[],
- //将字符串转换为字节数组使用getBytes()方法完成
- //指定时其字符编码 为utf-8
- md.update(input.getBytes("utf-8"));
- //3.计算信息摘要digest()方法
- //返回值为字节数组
- byte[] hashCode = md.digest();
- //4.将byte[] 转换为找度为32位的16进制字符串
- //声明StringBuffer对象来存放最后的值
- StringBuffer sb = new StringBuffer();
- //遍历字节数组
- for (byte b: hashCode) {
- //对数组内容转化为16进制,
- sb.append(Character.forDigit(b >> 4 & 0xf, 16));
- //换2次为32位的16进制
- sb.append(Character.forDigit(b & 0xf, 16));
- }
- System.out.println("加密后的结果是:" + sb.toString());
- } catch(NoSuchAlgorithmException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch(UnsupportedEncodingException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- public static void main(String[] args) {
- //声明加密MD5类的对象
- MD5 md5 = new MD5();
- //使用Scanner来输入一个字符
- Scanner scanner = new Scanner(System. in );
- System.out.println("请输入要加密的内容:");
- String input = scanner.nextLine();
- //调用加密方法
- md5.generateMD5(input);
- }
- }
结果:
请输入要加密的内容:
学习MD5加密过程
加密后的结果是:b826cdac46f01dcc8ccc60a76cebf858
第二段代码:
- package test.md5;
- import java.security.MessageDigest;
- public class MD5Util {
- public final static String MD5(String s) {
- char hexDigits[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
- try {
- byte[] btInput = s.getBytes();
- // 获得MD5摘要算法的 MessageDigest 对象
- MessageDigest mdInst = MessageDigest.getInstance("MD5");
- // 使用指定的字节更新摘要
- mdInst.update(btInput);
- // 获得密文
- byte[] md = mdInst.digest();
- // 把密文转换成十六进制的字符串形式
- int j = md.length;
- char str[] = new char[j * 2];
- int k = 0;
- for (int i = 0; i < j; i++) {
- byte byte0 = md[i];
- str[k++] = hexDigits[byte0 >>> 4 & 0xf];
- str[k++] = hexDigits[byte0 & 0xf];
- }
- return new String(str);
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- }
- public static void main(String[] args) {
- System.out.println(MD5Util.MD5("20121221"));
- System.out.println(MD5Util.MD5("加密"));
- }
- }
第三段代码:MD5加密算法的java实现
- package other;
- import java.security.MessageDigest;
- import java.security.NoSuchAlgorithmException;
- /*
- * MD5 算法
- */
- public class MD5 {
- // 全局数组
- private final static String[] strDigits = { "0", "1", "2", "3", "4", "5",
- "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
- public MD5() {
- }
- // 返回形式为数字跟字符串
- private static String byteToArrayString(byte bByte) {
- int iRet = bByte;
- // System.out.println("iRet="+iRet);
- if (iRet < 0) {
- iRet += 256;
- }
- int iD1 = iRet / 16;
- int iD2 = iRet % 16;
- return strDigits[iD1] + strDigits[iD2];
- }
- // 返回形式只为数字
- private static String byteToNum(byte bByte) {
- int iRet = bByte;
- System.out.println("iRet1=" + iRet);
- if (iRet < 0) {
- iRet += 256;
- }
- return String.valueOf(iRet);
- }
- // 转换字节数组为16进制字串
- private static String byteToString(byte[] bByte) {
- StringBuffer sBuffer = new StringBuffer();
- for (int i = 0; i < bByte.length; i++) {
- sBuffer.append(byteToArrayString(bByte[i]));
- }
- return sBuffer.toString();
- }
- public static String GetMD5Code(String strObj) {
- String resultString = null;
- try {
- resultString = new String(strObj);
- MessageDigest md = MessageDigest.getInstance("MD5");
- // md.digest() 该函数返回值为存放哈希值结果的byte数组
- resultString = byteToString(md.digest(strObj.getBytes()));
- } catch (NoSuchAlgorithmException ex) {
- ex.printStackTrace();
- }
- return resultString;
- }
- public static void main(String[] args) {
- MD5 getMD5 = new MD5();
- System.out.println(getMD5.GetMD5Code("000000"));
- }
- }
来源: http://www.phperz.com/article/17/1123/360233.html