首页 > 代码库 > 16进制

16进制

public static boolean checkSignature(String signature, String timestamp, String nonce) {		String[] arr = new String[] { token, timestamp, nonce };		// 将token、timestamp、nonce三个参数进行字典序排序		Arrays.sort(arr);		StringBuilder content = new StringBuilder();		for (int i = 0; i < arr.length; i++) {			content.append(arr[i]);		}		MessageDigest md = null;		String tmpStr = null;		try {			md = MessageDigest.getInstance("SHA-1");			// 将三个参数字符串拼接成一个字符串进行sha1加密			byte[] digest = md.digest(content.toString().getBytes());			tmpStr = byteToStr(digest);		} catch (NoSuchAlgorithmException e) {			e.printStackTrace();		}		content = null;		// 将sha1加密后的字符串可与signature对比,标识该请求来源于微信		return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;	}	/**	 * 将字节数组转换为十六进制字符串	 * 	 * @param byteArray	 * @return	 */	private static String byteToStr(byte[] byteArray) {		String strDigest = "";		for (int i = 0; i < byteArray.length; i++) {			strDigest += byteToHexStr(byteArray[i]);		}		return strDigest;	}	/**	 * 将字节转换为十六进制字符串	 * 	 * @param mByte	 * @return	 */	private static String byteToHexStr(byte mByte) {		char[] Digit = { ‘0‘, ‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘, ‘8‘, ‘9‘, ‘A‘, ‘B‘, ‘C‘, ‘D‘, ‘E‘, ‘F‘ };		char[] tempArr = new char[2];

// 一个字节 8位 右移四位挤掉取高四位(取高四位)
tempArr[0] = Digit[(mByte >>> 4) & 0X0F]; 
tempArr[1] = Digit[mByte & 0X0F];
// 一个字节 8位 与0x0f 得到后四位  刚好在0-15之间  在字符数组长度内(取低四位)
		String s = new String(tempArr);		return s;	}}

  

16进制