亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

為什么System.out.println(temp); System.out.println(signature);兩個一直不相等

package com.imooc.servlet;


import java.io.IOException;

import java.io.PrintWriter;


import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import com.imooc.utils.CheckUtils;


/**?

?* @author 作者 zwl:?

?* @version 創建時間:2015年8月10日 上午9:17:39?

?* @param?

AppID(應用ID)wx5c0d8ccaff56320b

AppSecret(應用密鑰)7dfe7278da922bce0c357510ddb99169

?*/

public class WeichatServlet ?extends HttpServlet{


@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

//System.out.println("正在接通");

String signature = req.getParameter("signature");

String timestamp = req.getParameter("timestamp");

String nonce = req.getParameter("nonce");

String echostr = req.getParameter("echostr");

// System.out.println(signature);

// System.out.println(timestamp);

// System.out.println(nonce);

// System.out.println(echostr);

PrintWriter out = resp.getWriter();

if (CheckUtils.checkSignature(signature, timestamp, nonce)) {

out.print(echostr);

}else {

out.print("error");

}

}

}

package com.imooc.utils;


import java.security.MessageDigest;

import java.util.Arrays;


/**?

?* @author 作者 zwl:?

?* @version 創建時間:2015年8月10日 上午9:17:39?

?* @param?

?*/

public class CheckUtils {

private static final String token ="imooc";

public static boolean checkSignature(String signature,String timestamp,String nonce){

String[] arr=new String[]{token,signature,timestamp,nonce};

//排序

Arrays.sort(arr);

//生成字符串

StringBuffer content = new StringBuffer();

for (int i = 0; i < arr.length; i++) {

//System.out.println(arr[i]);

content.append(arr[i]);

}

//sha1加密

String temp = getSha1(content.toString());

System.out.println(temp);

System.out.println(signature);

return temp.equals(signature);

}

public static String getSha1(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 new String(buf);

}catch (Exception e) {

return null;

}

}


}



為什么一直兩個都不相等啊 哎

正在回答

1 回答

把String[] arr=new String[]{token,signature,timestamp,nonce};里面的signature去掉,只需要將token、timestamp、nonce三個參數進行字典序排序即可

0 回復 有任何疑惑可以回復我~
#1

End13147 提問者

非常感謝!
2015-08-21 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

為什么System.out.println(temp); System.out.println(signature);兩個一直不相等

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號