signutil
public static class SignUtil { private static final String token ="zhumulangma"; //servlet传入signature,signature,nonce public static boolean checkSignature(String signature, String timestamp, String nonce) { //将token、timestamp、nonce三个参数进行字典序排序 String[] arr = new String[] {token, timestamp, nonce }; Arrays.sort(arr); //将三个参数字符串拼接成一个字符串 StringBuilder content = new StringBuilder(); for (int i = 0; i < arr.length; i++) { content.append(arr[i]); } //进行sha1加密 //SHA是美国国家安全局设计的,由美国国家标准和技术研究院发布的一系列密码散列函数。 MessageDigest md = null; String tmpStr = null; try { md = MessageDigest.getInstance("SHA-1"); byte[] digest = md.digest(content.toString().getBytes()); tmpStr = byteToStr(digest); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); content = null; System.out.println("tmpStr:"+tmpStr); //开发者获得加密后的字符串可与signature对比 return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;
private static String byteToStr(byte[] byteArray) { String strDigest = ""; for (int i = 0; i < byteArray.length; i++) { strDigest += byteToHexStr(byteArray[i]); } return strDigest; 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]; tempArr[0] = Digit[(mByte >>> 4) & 0X0F]; tempArr[1] = Digit[mByte & 0X0F]; String s = new String(tempArr); return s;