Blame view

src/main/java/com/jfinal/weixin/sdk/encrypt/SHA1.java 1.83 KB
e80df919   atao   init
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
  /**
   * 对公众平台发送给公众账号的消息加解密示例代码.
   *
   * @copyright Copyright (c) 1998-2014 Tencent Inc.
   */
  
  // ------------------------------------------------------------------------
  
  package com.jfinal.weixin.sdk.encrypt;
  
  import com.jfinal.kit.LogKit;
  
  import java.security.MessageDigest;
  import java.util.Arrays;
  
  /**
   * SHA1 class
   *
   * 计算公众平台的消息签名接口.
   */
  class SHA1 {
  
      /**
       * SHA1算法生成安全签名
       * @param token 票据
       * @param timestamp 时间戳
       * @param nonce 随机字符串
       * @param encrypt 密文
       * @return 安全签名
       * @throws AesException
       */
      public static String getSHA1(String token, String timestamp, String nonce, String encrypt) throws AesException
                {
          try {
              String[] array = new String[] { token, timestamp, nonce, encrypt };
              StringBuffer sb = new StringBuffer();
              // 字符串排序
              Arrays.sort(array);
              for (int i = 0; i < 4; i++) {
                  sb.append(array[i]);
              }
              String str = sb.toString();
              // SHA1签名生成
              MessageDigest md = MessageDigest.getInstance("SHA-1");
              md.update(str.getBytes());
              byte[] digest = md.digest();
  
              StringBuffer hexstr = new StringBuffer();
              String shaHex = "";
              for (int i = 0; i < digest.length; i++) {
                  shaHex = Integer.toHexString(digest[i] & 0xFF);
                  if (shaHex.length() < 2) {
                      hexstr.append(0);
                  }
                  hexstr.append(shaHex);
              }
              return hexstr.toString();
          } catch (Exception e) {
              LogKit.error(e.getMessage(), e);
              throw new AesException(AesException.ComputeSignatureError);
          }
      }
  }