標籤:nat out private void [] sys a演算法 wan stat
SHAHelper.java
package com.util; /** * @author wangxiangyu * @date:2017年10月16日 上午9:00:47 * 類說明:SHA簽名演算法 */public class SHAHelper { private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5","6", "7", "8", "9", "A", "B", "C", "D", "E", "F"}; /** * 轉換位元組數組為16進位字串 * * @param b 位元組數組 * @return 16進位字串 */ public static String byteArrayToHexString(byte[] b) { StringBuffer resultSb = new StringBuffer(); for (int i = 0; i < b.length; i++) { resultSb.append(byteToHexString(b[i])); } return resultSb.toString(); } private static String byteToHexString(byte b) { int n = b; if (n < 0) n = 256 + n; int d1 = n / 16; int d2 = n % 16; return hexDigits[d1] + hexDigits[d2]; } /** * SHA摘要計算(byte[]). * * @param src byte[] * @throws Exception * @return byte[] 16 bit digest */ public static byte[] SHADigest(byte[] src) throws Exception { java.security.MessageDigest alg = java.security.MessageDigest .getInstance("SHA"); return alg.digest(src); } /** * SHA摘要計算(String). * * @param src String型的目標串 * @throws Exception * @return String */ public static String SHADigest(String src) throws Exception { return byteArrayToHexString(SHADigest(src.getBytes("UTF-8"))); } /** Test crypt */ public static void main(String[] args) { try { // 獲得的明文資料 String serialNumber = "0101102010031723101273807F00179E"; String reqBizArgs = "<ReqBizArgs version=‘1‘><test>test</test></ReqBizArgs>"; String key = "8204CDBD76BB69DAE040007F010017A4"; String desStr = serialNumber + reqBizArgs + key; System.out.println("原文串 desStr = ‘" + desStr + "‘"); // 產生Signature String signature = SHADigest(desStr); System.out.println("簽名串Signature = ‘" + signature + "‘"); } catch (Exception ex) { ex.printStackTrace(); } }}
SHA演算法:簽名串SHA演算法Java語言參考(SHAHelper.java)