数字签名-MD5

MD5是信息摘要的意思,报文产生摘要是唯一的(1:1),而且是单向的(通过摘要反推不出源报文)

java中的java.security.MessageDigest类,参考MessageDigest的功能及用法

 1  public static byte[] getMD5Mac(byte[] bySourceByte) {
 2         byte[] byDisByte;
 3         MessageDigest md;
 4         try {
 5             md = MessageDigest.getInstance("MD5");
 6             md.reset();
 7             md.update(bySourceByte);
 8             byDisByte = md.digest();
 9         } catch (NoSuchAlgorithmException n) {
10             return (null);
11         }
12         return (byDisByte);
13     }

MessageDigest 是 statefull,电话 MessageDigest.update (byte [] 输入) 累积文摘更新,直到我们称之为 MessageDigest.digest。运行此测试,以确保:

   
1     MessageDigest md1 = MessageDigest.getInstance("MD5");
2     md1.update(new byte[] {1, 2});
3     md1.update(new byte[] {3, 4});
4     System.out.println(Arrays.toString(md1.digest()));
5 
6     MessageDigest md2 = MessageDigest.getInstance("MD5");
7     md2.update(new byte[] {1, 2, 3, 4});
8     System.out.println(Arrays.toString(md2.digest()));
输出:
[8, -42, -64, 90, 33, 81, 42, 121, -95, -33, -21, -99, 42, -113, 38, 47]
[8, -42, -64, 90, 33, 81, 42, 121, -95, -33, -21, -99, 42, -113, 38, 47]

生成的摘要是byte[]类型的,需要转换成String

 1 public static String bintoascii(byte[] bySourceByte) {
 2         int len, i;
 3         byte tb;
 4         char high, tmp, low;
 5         len = bySourceByte.length;
 6         StringBuilder sb = new StringBuilder(len);
 7         for (i = 0; i < len; i++) {
 8             tb = bySourceByte[i];
 9             tmp = (char) ((tb >>> 4) & 0x000f);
10             if (tmp >= 10)
11                 high = (char) ('a' + tmp - 10);
12             else
13                 high = (char) ('0' + tmp);
14             sb.append(high);
15             tmp = (char) (tb & 0x000f);
16             if (tmp >= 10)
17                 low = (char) ('a' + tmp - 10);
18             else
19                 low = (char) ('0' + tmp);
20             sb.append(low);
21         }
22         return sb.toString();
23     }
原文地址:https://www.cnblogs.com/zhima-hu/p/7637674.html