///?& lt總結& gt
///?驗證微信簽名
///?& lt/summary & gt;
///?*?令牌、時間戳和nonce這三個參數按字典順序排序。
///?*?將三個參數字符串拼接成壹個字符串用於sha1加密。
///?*?開發者獲得的加密字符串可以與簽名進行比較,以識別請求源自微信。
///?& ltreturns & gt& lt/returns & gt;
私人?布爾?檢查簽名()
{
字符串?簽名?=?請求。query string[" signature "];
字符串?時間戳?=?請求。query string[" timestamp "];
字符串?現時?=?請求。query string[" nonce "];
string[]?ArrTmp?=?{?Token?時間戳,?現時?};
數組。sort(ArrTmp);?//字典排序
字符串?tmpStr?=?字符串。聯接(",?ArrTmp);
tmpStr?=?表單認證。hashpasswordforstoringconfigfile(tmpStr," sha 1 ");
tmpStr?=?tmpStr。to lower();
如果?(tmpStr?==?簽名)
{
回歸?真實;
}
其他
{
回歸?假的;
}
}
公共?靜電?布爾?CheckSignature(字符串?簽名,?字符串?時間戳,?字符串?nonce)
{
String[]?arr?=?新的?String[]?{?Token?時間戳,?現時?};
//?按照字典順序對三個參數token、timestamp和nonce進行排序?
數組。排序& lt字符串& gt(arr);
StringBuilder?內容?=?新的?StringBuilder();
為了什麽?(int?我?=?0;?我?& lt?由…改編長度;?i++)
{
內容。append(arr[I]);
}
字符串?tmpStr?=?SHA1_Encrypt(內容。ToString());
//?sha1的加密字符串可以和signature對比,說明請求源於微信?
回歸?tmpStr?!=?nulltmpStr。等於(簽名)?:?假的;
}
///?& lt總結& gt
///?用默認密鑰加密字符串。
///?& lt/summary & gt;
///?& ltparam?name="Source_String " >& lt/param & gt;
///?& ltreturns & gt& lt/returns & gt;
公共?靜電?字符串?SHA1_Encrypt(字符串?源_字符串)
{
byte[]?StrRes?=?編碼。default . GetBytes(Source _ String);
HashAlgorithm?伊莎?=?新的?sha 1 cryptoserviceprovider();
StrRes?=?伊莎。compute hash(StrRes);
StringBuilder?EnText?=?新的?StringBuilder();
foreach?(字節?伊比特?在?StrRes)
{
EnText。AppendFormat("{0:x2} ",?iByte);
}
回歸?EnText。ToString();
}
私人?作廢?有效()
{
字符串?echoStr?=?請求。query string[" echoStr "];
如果?(CheckSignature())
{
如果?(!字符串。IsNullOrEmpty(echoStr))
{
回應。write(echoStr);
回應。end();
}
}
}
///?& lt總結& gt
///?Unix時間轉換為日期時間
///?& lt/summary & gt;
///?& ltparam?name = " timeStamp " & gt& lt/param & gt;
///?& ltreturns & gt& lt/returns & gt;
私人?日期時間?UnixTimeToTime(字符串?時間戳)
{
日期時間?dtStart?=?時區。CurrentTimeZone.ToLocalTime(新?DateTime(1970,?1,?1));
龍?lTime?=?很長。解析(時間戳?+?"0000000");
時間跨度?托諾?=?新的?TimeSpan(lTime);
回歸?dtStart。添加(toNow);
}
///?& lt總結& gt
///?將datetime轉換為unixtime
///?& lt/summary & gt;
///?& ltparam?name = " time " & gt& lt/param & gt;
///?& ltreturns & gt& lt/returns & gt;
私人?int?ConvertDateTimeInt(System。日期時間?時間)
{
系統。日期時間?開始時間?=?時區。CurrentTimeZone.ToLocalTime(新?系統。DateTime(1970,?1,?1));
回歸?(int)(時間?-?開始時間)。總秒數;
}
#endregion希望妳能用。