服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服务器之家 - 编程语言 - JAVA教程 - java实现MD5加密方法汇总

java实现MD5加密方法汇总

2020-01-13 16:56hebedich JAVA教程

本文给大家汇总介绍了2种java实现MD5加密的方法,非常的实用,这里分享给大家,学习下其中的思路,对大家学习java非常有帮助。

代码一:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/**
 * 实现MD5加密
 *
 */
public class MD5 {
   
  /**
   * 获取加密后的字符串
   * @param input
   * @return
   */
  public static String stringMD5(String pw) {
    try {
        
       // 拿到一个MD5转换器(如果想要SHA1参数换成”SHA1”)
       MessageDigest messageDigest =MessageDigest.getInstance("MD5");
       // 输入的字符串转换成字节数组
       byte[] inputByteArray = pw.getBytes();
       // inputByteArray是输入字符串转换得到的字节数组
       messageDigest.update(inputByteArray);
       // 转换并返回结果,也是字节数组,包含16个元素
       byte[] resultByteArray = messageDigest.digest();
       // 字符数组转换成字符串返回
       return byteArrayToHex(resultByteArray);
      } catch (NoSuchAlgorithmException e) {
       return null;
      }
  }
   
  public static String byteArrayToHex(byte[] byteArray) {
     
    // 首先初始化一个字符数组,用来存放每个16进制字符
    char[] hexDigits = {'0','1','2','3','4','5','6','7','8','9', 'A','B','C','D','E','F' };
    // new一个字符数组,这个就是用来组成结果字符串的(解释一下:一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方))
    char[] resultCharArray =new char[byteArray.length * 2];
    // 遍历字节数组,通过位运算(位运算效率高),转换成字符放到字符数组中去
    int index = 0;
    for (byte b : byteArray) {
      resultCharArray[index++] = hexDigits[b>>> 4 & 0xf];
      resultCharArray[index++] = hexDigits[b& 0xf];
    }
    // 字符数组组合成字符串返回
    return new String(resultCharArray);
  }
}

方法二:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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"));
  }
}

延伸 · 阅读

精彩推荐
  • JAVA教程Java锁之自旋锁详解

    Java锁之自旋锁详解

    这篇文章主要介绍了Java锁之自旋锁详解,本文是系列文章的第一篇,请持续关注脚本之家java栏目,需要的朋友可以参考下 ...

    junjie2652019-11-28
  • JAVA教程java反射使用示例分享

    java反射使用示例分享

    这篇文章主要介绍了java反射使用示例,代码很简单,需要的朋友可以参考下 ...

    java教程网5072019-11-10
  • JAVA教程Java基础教程之组合(composition)

    Java基础教程之组合(composition)

    这篇文章主要介绍了Java基础教程之组合(composition),组合是在Java中实现程序复用(reusibility)的基本手段之一,需要的朋友可以参考下 ...

    junjie2372019-11-27
  • JAVA教程java实现八皇后问题示例分享

    java实现八皇后问题示例分享

    这篇文章主要介绍了java实现八皇后问题示例,八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于...

    java教程网1832019-11-14
  • JAVA教程java基于JDBC连接Oracle 11g Release2实例分析

    java基于JDBC连接Oracle 11g Release2实例分析

    这篇文章主要介绍了java基于JDBC连接Oracle 11g Release2的方法,实例分析了JDBC连接Oracle 11g Release2容易出现的异常与解决方法,需要的朋友可以参考下 ...

    红薯1912019-12-24
  • JAVA教程JVM的垃圾回收算法工作原理详解

    JVM的垃圾回收算法工作原理详解

    这篇文章主要介绍了JVM的垃圾回收算如何判断对象是否可以被回收,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,...

    clawhub2312019-06-30
  • JAVA教程二进制中1的个数

    二进制中1的个数

    这篇文章介绍了二进制中1的个数,有需要的朋友可以参考一下 ...

    java之家1402019-10-15
  • JAVA教程Java中的观察者模式实例讲解

    Java中的观察者模式实例讲解

    这篇文章主要介绍了Java中的观察者模式实例讲解,本文先是讲解了观察者模式的概念,然后以实例讲解观察者模式的实现,以及给出了UML图,需要的朋友可以参...

    junjie2692019-12-06