packagerichinfo.attendance.util;importjava.security.MessageDigest;importjava.util.Iterator;importjava.util.Map;importjava.util.Map.Entry;importjava.util.Random;importjava.util.Set;importjava.util.SortedMap;importjava.util.TreeMap;public classSignatureUtil {public static final String TOKEN = "3ad8id23i907o2kmli03";//用于生成数字签名
/*** 创建SHA1签名
*@paramparams
*@returnSHA1签名*/
public static String createSignature(SortedMapparams) {returnsha1Encrypt(sortParams(params));
}/*** 创建SHA1签名
*@paramtimeStamp
*@paramnonce
*@returnSHA1签名*/
public staticString createSignature(String timeStamp, String nonce) {
SortedMap signParams = new TreeMap();
signParams.put("token", TOKEN);
signParams.put("timeStamp", timeStamp);
signParams.put("nonce", nonce);returncreateSignature(signParams);
}/*** 使用SHA1算法对字符串进行加密
*@paramstr
*@return
*/
public staticString sha1Encrypt(String str) {if (str == null || str.length() == 0) {return null;
}char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9','a', 'b', 'c', 'd', 'e', 'f'};try{
MessageDigest mdTemp= MessageDigest.getInstance("SHA1");
mdTemp.update(str.getBytes("UTF-8"));byte[] md =mdTemp.digest();int j =md.length;char buf[] = new char[j * 2];int k = 0;for (int i = 0; i < j; i++) {byte byte0 =md[i];
buf[k++] = hexDigits[byte0 >>> 4 & 0xf];
buf[k++] = hexDigits[byte0 & 0xf];
}return newString(buf);
}catch(Exception e) {return null;
}
}/*** 生成时间戳
*@return
*/
public staticString getTimeStamp() {return String.valueOf(System.currentTimeMillis() / 1000);
}/*** 生成6位随机字符串
*@return
*/
public staticString getRandomStr() {int length = 6;
String base= "abcdefghijklmnopqrstuvwxyz0123456789";
Random random= newRandom();
StringBuffer sb= newStringBuffer();for (int i = 0; i < length; i++) {int number =random.nextInt(base.length());
sb.append(base.charAt(number));
}returnsb.toString();
}/*** 根据参数名称对参数进行字典排序
*@paramparams
*@return
*/
private static String sortParams(SortedMapparams) {
StringBuffer sb= newStringBuffer();
Set> es =params.entrySet();
Iterator> it =es.iterator();while(it.hasNext()) {
Map.Entry entry =it.next();
String k=entry.getKey();
String v=entry.getValue();
sb.append(k+ "=" + v + "&");
}return sb.substring(0, sb.lastIndexOf("&"));
}public static void main(String[] args) throwsException {//c4db7f5867a6290378cf24429f2803da0516a788
String timeStamp =getTimeStamp();
String nonce=getRandomStr();
String sign=createSignature(timeStamp, nonce);
System.out.println("timeStamp:"+timeStamp);
System.out.println("nonce:"+nonce);
System.out.println("signature:" +sign);
}
}