zhanghua
2025-04-14 1cad14bca191807e18705c3a5526eda8151be439
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
66
67
68
package com.ycl.common.util;
 
import java.security.MessageDigest;
 
public class Md5 {
/**
* md5加密方法
* @author: zhengsunlei
* Jul 30, 2010 4:38:28 PM
* @param plainText 加密字符串
* @return String 返回32位md5加密字符串(16位加密取substring(8,24))
* 每位工程师都有保持代码优雅的义务
* each engineer has a duty to keep the code elegant
*/
public final static String md5(String plainText) {
   // 返回字符串
   String md5Str = null;
   try {
    // 操作字符串
    StringBuffer buf = new StringBuffer();
   /**
    * MessageDigest 类为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。
    * 信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值。
    * 
    * MessageDigest 对象开始被初始化。
    * 该对象通过使用 update()方法处理数据。
    * 任何时候都可以调用 reset()方法重置摘要。
    * 一旦所有需要更新的数据都已经被更新了,应该调用digest()方法之一完成哈希计算。 
    * 
    * 对于给定数量的更新数据,digest 方法只能被调用一次。
    * 在调用 digest 之后,MessageDigest 对象被重新设置成其初始状态。
    */ 
    MessageDigest md = MessageDigest.getInstance("MD5");
   
    // 添加要进行计算摘要的信息,使用 plainText 的 byte 数组更新摘要。
    md.update(plainText.getBytes("UTF-8"));
    // 计算出摘要,完成哈希计算。
    byte b[] = md.digest();
    int i;
    for (int offset = 0; offset < b.length; offset++) {
     i = b[offset];
     if (i < 0) {
      i += 256;
     }
     if (i < 16) {
      buf.append("0");
     }
     // 将整型 十进制 i 转换为16位,用十六进制参数表示的无符号整数值的字符串表示形式。
     buf.append(Integer.toHexString(i));
    }
    // 32位的加密
    md5Str = buf.toString().toUpperCase();
    // 16位的加密
    // md5Str = buf.toString().md5Strstring(8,24);
   } catch (Exception e) {
    e.printStackTrace();
   }
   return md5Str;
}
 
    public static boolean checkMD5(String verifyString, String md5) {
            return md5.equals(md5(verifyString));
    }
    
    public static void main(String[] args) {
        System.out.println(md5("appId=wx593e357018dd07f1&nonceStr=3EdGqO3vHlTzMKeyCvV2mdBSeWXNSSwq&package=wx20150715200343f61cb138620134794141&signType=MD5&timeStamp=20150715200347&key=waibjtam19801116passwordyurimeng"));
    }
}