zoukankan      html  css  js  c++  java
  • 数字签名-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     }
  • 相关阅读:
    qt中使用dll库的方法
    41. wait notify 方法
    40.方式二的练习
    39.线程的实现方式二
    38. 死锁
    37. 解决线程问题方式二(同步函数)
    36. 解决线程问题方式一(同步代码块synchronized)
    35.线程问题
    34. Thread类的常用方法
    33. 自定义线程
  • 原文地址:https://www.cnblogs.com/zhima-hu/p/7637674.html
Copyright © 2011-2022 走看看