{"id":30059,"date":"2024-11-25T11:15:31","date_gmt":"2024-11-25T03:15:31","guid":{"rendered":"https:\/\/fwq.ai\/blog\/30059\/"},"modified":"2024-11-25T11:15:31","modified_gmt":"2024-11-25T03:15:31","slug":"%e5%be%ae%e4%bf%a1%e5%bc%80%e5%8f%91%e4%b9%8b%e6%b6%88%e6%81%af%e4%bd%93%e7%ad%be%e5%90%8d%e5%92%8c%e5%8a%a0%e8%a7%a3%e5%af%86","status":"publish","type":"post","link":"https:\/\/fwq.ai\/blog\/30059\/","title":{"rendered":"\u5fae\u4fe1\u5f00\u53d1\u4e4b\u6d88\u606f\u4f53\u7b7e\u540d\u548c\u52a0\u89e3\u5bc6"},"content":{"rendered":"<p>&nbsp; \u524d\u51e0\u7bc7\u4e3b\u8981\u662f\u5fae\u4fe1\u5f00\u53d1\u7684\u51c6\u5907\u5de5\u4f5c\uff0c\u4e5f\u6ca1\u6709\u4ec0\u4e48\u6280\u672f\u542b\u91cf\u3002\u5728\u7b2c\u4e00\u7bc7\u548c\u7b2c\u4e8c\u7bc7\u4e2d\uff0c\u6211\u4e3b\u8981\u8bb2\u7684\u662f\u4f7f\u7528\u82b1\u751f\u58f3\u6765\u914d\u5408vs\u8fdb\u884c\u4ee3\u7801\u8c03\u8bd5\uff0c\u4e5f\u4e00\u5ea6\u88ab\u56ed\u53cb\u5410\u69fd\u672c\u4eba\u662f\u82b1\u751f\u58f3\u8bf7\u6765\u7684\u9017\u6bd4\uff0c\u6ca1\u529e\u6cd5\uff0c\u4e3a\u4e86\u548c\u82b1\u751f\u58f3\u5212\u6e05\u754c\u9650\uff0c\u5728\u672c\u7bc7\u8fdb\u5165\u6b63\u6587\u524d\uff0c\u4e3a\u5927\u5bb6\u4ecb\u7ecd\u4e00\u4e2a\u6bd4\u82b1\u751f\u58f3\u66f4\u597d\u7528\u7684\u5de5\u5177ngrok\uff0cngrok\u7684\u597d\u5904\u6211\u5c31\u4e0d\u5728\u6b64\u5177\u4f53\u8bf4\u660e\u4e86\uff0c\u6bd5\u7adf\u4e0d\u662f\u672c\u6587\u7684\u91cd\u70b9<\/p>\n<p>&nbsp;&nbsp; \u51fa\u4e8e\u5b89\u5168\u8003\u8651\uff0c\u5fae\u4fe1\u516c\u4f17\u5e73\u53f0\u572810\u6708\u4efd\u7684\u65f6\u5019\u52a0\u5165\u4e86\u6d88\u606f\u4f53\u7684\u52a0\u89e3\u5bc6\u529f\u80fd\uff0c\u9996\u5148\uff0c\u9700\u8981\u5148\u9a8c\u8bc1\u7b7e\u540d\uff0c\u7528\u4e8e\u516c\u4f17\u5e73\u53f0\u548c\u516c\u4f17\u8d26\u53f7\u9a8c\u8bc1\u6d88\u606f\u4f53\u7684\u6b63\u786e\u6027\uff0c\u5176\u6b21\uff0c\u9488\u5bf9\u63a8\u9001\u7ed9\u516c\u4f17\u53f7\u7684\u666e\u901a\u6d88\u606f\u548c\u6d88\u606f\uff0c\u4ee5\u53ca\u63a8\u9001\u7ed9\u8bbe\u5907\u516c\u4f17\u8d26\u53f7\u7684\u8bbe\u5907\u8fdb\u884c\u52a0\u5bc6\uff0c\u6700\u540e\uff0c\u516c\u4f17\u53f7\u5bf9\u5bc6\u6587\u6d88\u606f\u7684\u56de\u590d\u4e5f\u9700\u8981\u52a0\u5bc6\u3002\u542f\u7528\u52a0\u89e3\u5bc6\u529f\u80fd\u540e\uff0c\u516c\u4f17\u5e73\u53f0\u670d\u52a1\u5668\u5728\u5411\u516c\u4f17\u53f7\u670d\u52a1\u5668\u914d\u7f6e\u5730\u5740\u63a8\u9001\u6d88\u606f\u65f6\uff0curl\u5c06\u52a0\u4e24\u4e2a\u53c2\u6570\uff0c\u4e00\u4e2a\u662f\u52a0\u5bc6\u7c7b\u578b\u4e00\u4e2a\u662f\u6d88\u606f\u4f53\u7b7e\u540d\uff0c\u5e76\u4ee5\u6b64\u6765\u4f53\u73b0\u65b0\u529f\u80fd\u3002\u52a0\u5bc6\u7b97\u6cd5\u91c7\u7528AES\u3002\u5173\u4e8e\u660e\u6587\u6a21\u5f0f\uff0c\u517c\u5bb9\u6a21\u5f0f\uff0c\u7684\u8bf4\u660e\uff0c\u5927\u5bb6\u8bf7\u53c2\u8003\u5b98\u65b9\u6587\u6863.<\/p>\n<p>\u9a8c\u8bc1\u6d88\u606f\u771f\u5b9e\u6027\u548c\u52a0\u89e3\u5bc6\u7684\u5e2e\u52a9\u7c7b\u5b98\u65b9\u63d0\u4f9b\u7684\u6709demo\uff0c\u518d\u6b21\u4e0d\u8be6\u7ec6\u8bb2\u8ff0\u4e86\uff0c\u4e0b\u8f7d\u4e0b\u6765\u53ef\u4ee5\u76f4\u63a5\u8c03\u7528\uff0c\u4e0b\u9762\u8bf7\u770b\u4ee3\u7801\uff1a<\/p>\n<pre>using&nbsp;System;using&nbsp;System.Collections.Generic;using&nbsp;System.Linq;using&nbsp;System.Text;using&nbsp;System.Security.Cryptography;using&nbsp;System.IO;using&nbsp;System.Net;namespace&nbsp;WxApi\r\n{&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;Cryptography\r\n&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;UInt32&nbsp;HostToNetworkOrder(UInt32&nbsp;inval)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UInt32&nbsp;outval&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&amp;gt;&nbsp;(i&nbsp;*&nbsp;8))&nbsp;&amp;amp;&nbsp;255);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;outval;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;Int32&nbsp;HostToNetworkOrder(Int32&nbsp;inval)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int32&nbsp;outval&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&amp;gt;&nbsp;(i&nbsp;*&nbsp;8))&nbsp;&amp;amp;&nbsp;255);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;outval;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u89e3\u5bc6\u65b9\u6cd5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;param&gt;\u5bc6\u6587\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;param&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;returns&gt;&lt;\/returns&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;string&nbsp;AES_decrypt(String&nbsp;Input,&nbsp;string&nbsp;EncodingAESKey,&nbsp;ref&nbsp;string&nbsp;appid)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;Key;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Key&nbsp;=&nbsp;Convert.FromBase64String(EncodingAESKey&nbsp;+&nbsp;\"=\");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;Iv&nbsp;=&nbsp;new&nbsp;byte[16];\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Array.Copy(Key,&nbsp;Iv,&nbsp;16);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;btmpMsg&nbsp;=&nbsp;AES_decrypt(Input,&nbsp;Iv,&nbsp;Key);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;len&nbsp;=&nbsp;BitConverter.ToInt32(btmpMsg,&nbsp;16);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;len&nbsp;=&nbsp;IPAddress.NetworkToHostOrder(len);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;bMsg&nbsp;=&nbsp;new&nbsp;byte[len];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;bAppid&nbsp;=&nbsp;new&nbsp;byte[btmpMsg.Length&nbsp;-&nbsp;20&nbsp;-&nbsp;len];\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Array.Copy(btmpMsg,&nbsp;20,&nbsp;bMsg,&nbsp;0,&nbsp;len);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Array.Copy(btmpMsg,&nbsp;20&nbsp;+&nbsp;len,&nbsp;bAppid,&nbsp;0,&nbsp;btmpMsg.Length&nbsp;-&nbsp;20&nbsp;-&nbsp;len);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;oriMsg&nbsp;=&nbsp;Encoding.UTF8.GetString(bMsg);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;appid&nbsp;=&nbsp;Encoding.UTF8.GetString(bAppid);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;oriMsg;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;String&nbsp;AES_encrypt(String&nbsp;Input,&nbsp;string&nbsp;EncodingAESKey,&nbsp;string&nbsp;appid)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;Key;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Key&nbsp;=&nbsp;Convert.FromBase64String(EncodingAESKey&nbsp;+&nbsp;\"=\");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;Iv&nbsp;=&nbsp;new&nbsp;byte[16];\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Array.Copy(Key,&nbsp;Iv,&nbsp;16);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;Randcode&nbsp;=&nbsp;CreateRandCode(16);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;bRand&nbsp;=&nbsp;Encoding.UTF8.GetBytes(Randcode);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;bAppid&nbsp;=&nbsp;Encoding.UTF8.GetBytes(appid);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;btmpMsg&nbsp;=&nbsp;Encoding.UTF8.GetBytes(Input);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;bMsgLen&nbsp;=&nbsp;BitConverter.GetBytes(HostToNetworkOrder(btmpMsg.Length));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;bMsg&nbsp;=&nbsp;new&nbsp;byte[bRand.Length&nbsp;+&nbsp;bMsgLen.Length&nbsp;+&nbsp;bAppid.Length&nbsp;+&nbsp;btmpMsg.Length];\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Array.Copy(bRand,&nbsp;bMsg,&nbsp;bRand.Length);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Array.Copy(bMsgLen,&nbsp;0,&nbsp;bMsg,&nbsp;bRand.Length,&nbsp;bMsgLen.Length);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Array.Copy(btmpMsg,&nbsp;0,&nbsp;bMsg,&nbsp;bRand.Length&nbsp;+&nbsp;bMsgLen.Length,&nbsp;btmpMsg.Length);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Array.Copy(bAppid,&nbsp;0,&nbsp;bMsg,&nbsp;bRand.Length&nbsp;+&nbsp;bMsgLen.Length&nbsp;+&nbsp;btmpMsg.Length,&nbsp;bAppid.Length);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;AES_encrypt(bMsg,&nbsp;Iv,&nbsp;Key);\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;string&nbsp;CreateRandCode(int&nbsp;codeLen)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;codeSerial&nbsp;=&nbsp;\"2,3,4,5,6,7,a,c,d,e,f,h,i,j,k,m,n,p,r,s,t,A,C,D,E,F,G,H,J,K,M,N,P,Q,R,S,U,V,W,X,Y,Z\";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(codeLen&nbsp;==&nbsp;0)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;codeLen&nbsp;=&nbsp;16;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string[]&nbsp;arr&nbsp;=&nbsp;codeSerial.Split(',');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;code&nbsp;=&nbsp;\"\";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;randValue&nbsp;=&nbsp;-1;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Random&nbsp;rand&nbsp;=&nbsp;new&nbsp;Random(unchecked((int)DateTime.Now.Ticks));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&nbsp;32)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pad&nbsp;=&nbsp;0;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;res&nbsp;=&nbsp;new&nbsp;byte[decrypted.Length&nbsp;-&nbsp;pad];\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Array.Copy(decrypted,&nbsp;0,&nbsp;res,&nbsp;0,&nbsp;decrypted.Length&nbsp;-&nbsp;pad);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;res;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<pre>using&nbsp;System;using&nbsp;System.Collections.Generic;using&nbsp;System.Linq;using&nbsp;System.Text;using&nbsp;System.Xml;using&nbsp;System.Collections;\/\/using&nbsp;System.Web;using&nbsp;System.Security.Cryptography;\/\/-40001&nbsp;\uff1a&nbsp;\u7b7e\u540d\u9a8c\u8bc1\u9519\u8bef\/\/-40002&nbsp;:&nbsp;&nbsp;xml\u89e3\u6790\u5931\u8d25\/\/-40003&nbsp;:&nbsp;&nbsp;sha\u52a0\u5bc6\u751f\u6210\u7b7e\u540d\u5931\u8d25\/\/-40004&nbsp;:&nbsp;&nbsp;AESKey&nbsp;\u975e\u6cd5\/\/-40005&nbsp;:&nbsp;&nbsp;appid&nbsp;\u6821\u9a8c\u9519\u8bef\/\/-40006&nbsp;:&nbsp;&nbsp;AES&nbsp;\u52a0\u5bc6\u5931\u8d25\/\/-40007&nbsp;\uff1a&nbsp;AES&nbsp;\u89e3\u5bc6\u5931\u8d25\/\/-40008&nbsp;\uff1a&nbsp;\u89e3\u5bc6\u540e\u5f97\u5230\u7684buffer\u975e\u6cd5\/\/-40009&nbsp;:&nbsp;&nbsp;base64\u52a0\u5bc6\u5f02\u5e38\/\/-40010&nbsp;:&nbsp;&nbsp;base64\u89e3\u5bc6\u5f02\u5e38namespace&nbsp;WxApi\r\n{&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;MsgCrypt\r\n&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;m_sToken;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;m_sEncodingAESKey;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;m_sAppID;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enum&nbsp;WXBizMsgCryptErrorCode\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WXBizMsgCrypt_OK&nbsp;=&nbsp;0,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WXBizMsgCrypt_ValidateSignature_Error&nbsp;=&nbsp;-40001,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WXBizMsgCrypt_ParseXml_Error&nbsp;=&nbsp;-40002,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WXBizMsgCrypt_ComputeSignature_Error&nbsp;=&nbsp;-40003,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WXBizMsgCrypt_IllegalAesKey&nbsp;=&nbsp;-40004,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WXBizMsgCrypt_ValidateAppid_Error&nbsp;=&nbsp;-40005,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WXBizMsgCrypt_EncryptAES_Error&nbsp;=&nbsp;-40006,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WXBizMsgCrypt_DecryptAES_Error&nbsp;=&nbsp;-40007,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WXBizMsgCrypt_IllegalBuffer&nbsp;=&nbsp;-40008,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WXBizMsgCrypt_EncodeBase64_Error&nbsp;=&nbsp;-40009,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WXBizMsgCrypt_DecodeBase64_Error&nbsp;=&nbsp;-40010\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u6784\u9020\u51fd\u6570&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;@param&nbsp;sToken:&nbsp;\u516c\u4f17\u5e73\u53f0\u4e0a\uff0c\u5f00\u53d1\u8005\u8bbe\u7f6e\u7684Token&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;@param&nbsp;sEncodingAESKey:&nbsp;\u516c\u4f17\u5e73\u53f0\u4e0a\uff0c\u5f00\u53d1\u8005\u8bbe\u7f6e\u7684EncodingAESKey&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;@param&nbsp;sAppID:&nbsp;\u516c\u4f17\u5e10\u53f7\u7684appid\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;MsgCrypt(string&nbsp;sToken,&nbsp;string&nbsp;sEncodingAESKey,&nbsp;string&nbsp;sAppID)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_sToken&nbsp;=&nbsp;sToken;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_sAppID&nbsp;=&nbsp;sAppID;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_sEncodingAESKey&nbsp;=&nbsp;sEncodingAESKey;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;\u68c0\u9a8c\u6d88\u606f\u7684\u771f\u5b9e\u6027\uff0c\u5e76\u4e14\u83b7\u53d6\u89e3\u5bc6\u540e\u7684\u660e\u6587&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;@param&nbsp;sMsgSignature:&nbsp;\u7b7e\u540d\u4e32\uff0c\u5bf9\u5e94URL\u53c2\u6570\u7684msg_signature&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;@param&nbsp;sTimeStamp:&nbsp;\u65f6\u95f4\u6233\uff0c\u5bf9\u5e94URL\u53c2\u6570\u7684timestamp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;@param&nbsp;sNonce:&nbsp;\u968f\u673a\u4e32\uff0c\u5bf9\u5e94URL\u53c2\u6570\u7684nonce&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;@param&nbsp;sPostData:&nbsp;\u5bc6\u6587\uff0c\u5bf9\u5e94POST\u8bf7\u6c42\u7684\u6570\u636e&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;@param&nbsp;sMsg:&nbsp;\u89e3\u5bc6\u540e\u7684\u539f\u6587\uff0c\u5f53return\u8fd4\u56de0\u65f6\u6709\u6548&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;@return:&nbsp;\u6210\u529f0\uff0c\u5931\u8d25\u8fd4\u56de\u5bf9\u5e94\u7684\u9519\u8bef\u7801\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int&nbsp;DecryptMsg(string&nbsp;sMsgSignature,&nbsp;string&nbsp;sTimeStamp,&nbsp;string&nbsp;sNonce,&nbsp;string&nbsp;sPostData,&nbsp;ref&nbsp;string&nbsp;sMsg)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(m_sEncodingAESKey.Length&nbsp;!=&nbsp;43)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(int)WXBizMsgCryptErrorCode.WXBizMsgCrypt_IllegalAesKey;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XmlDocument&nbsp;doc&nbsp;=&nbsp;new&nbsp;XmlDocument();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XmlNode&nbsp;root;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;sEncryptMsg;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doc.LoadXml(sPostData);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;=&nbsp;doc.FirstChild;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sEncryptMsg&nbsp;=&nbsp;root[\"Encrypt\"].InnerText;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch&nbsp;(Exception)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(int)WXBizMsgCryptErrorCode.WXBizMsgCrypt_ParseXml_Error;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/verify&nbsp;signature\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;ret&nbsp;=&nbsp;0;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;=&nbsp;VerifySignature(m_sToken,&nbsp;sTimeStamp,&nbsp;sNonce,&nbsp;sEncryptMsg,&nbsp;sMsgSignature);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(ret&nbsp;!=&nbsp;0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;ret;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/decrypt\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;cpid&nbsp;=&nbsp;\"\";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sMsg&nbsp;=&nbsp;Cryptography.AES_decrypt(sEncryptMsg,&nbsp;m_sEncodingAESKey,&nbsp;ref&nbsp;cpid);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch&nbsp;(FormatException)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(int)WXBizMsgCryptErrorCode.WXBizMsgCrypt_DecodeBase64_Error;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch&nbsp;(Exception)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(int)WXBizMsgCryptErrorCode.WXBizMsgCrypt_DecryptAES_Error;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(cpid&nbsp;!=&nbsp;m_sAppID)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(int)WXBizMsgCryptErrorCode.WXBizMsgCrypt_ValidateAppid_Error;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5c06\u4f01\u4e1a\u53f7\u56de\u590d\u7528\u6237\u7684\u6d88\u606f\u52a0\u5bc6\u6253\u5305&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;@param&nbsp;sReplyMsg:&nbsp;\u4f01\u4e1a\u53f7\u5f85\u56de\u590d\u7528\u6237\u7684\u6d88\u606f\uff0cxml\u683c\u5f0f\u7684\u5b57\u7b26\u4e32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;@param&nbsp;sTimeStamp:&nbsp;\u65f6\u95f4\u6233\uff0c\u53ef\u4ee5\u81ea\u5df1\u751f\u6210\uff0c\u4e5f\u53ef\u4ee5\u7528URL\u53c2\u6570\u7684timestamp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;@param&nbsp;sNonce:&nbsp;\u968f\u673a\u4e32\uff0c\u53ef\u4ee5\u81ea\u5df1\u751f\u6210\uff0c\u4e5f\u53ef\u4ee5\u7528URL\u53c2\u6570\u7684nonce&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;@param&nbsp;sEncryptMsg:&nbsp;\u52a0\u5bc6\u540e\u7684\u53ef\u4ee5\u76f4\u63a5\u56de\u590d\u7528\u6237\u7684\u5bc6\u6587\uff0c\u5305\u62ecmsg_signature,&nbsp;timestamp,&nbsp;nonce,&nbsp;encrypt\u7684xml\u683c\u5f0f\u7684\u5b57\u7b26\u4e32,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\u5f53return\u8fd4\u56de0\u65f6\u6709\u6548&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;return\uff1a\u6210\u529f0\uff0c\u5931\u8d25\u8fd4\u56de\u5bf9\u5e94\u7684\u9519\u8bef\u7801\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int&nbsp;EncryptMsg(string&nbsp;sReplyMsg,&nbsp;string&nbsp;sTimeStamp,&nbsp;string&nbsp;sNonce,&nbsp;ref&nbsp;string&nbsp;sEncryptMsg)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(m_sEncodingAESKey.Length&nbsp;!=&nbsp;43)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(int)WXBizMsgCryptErrorCode.WXBizMsgCrypt_IllegalAesKey;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;raw&nbsp;=&nbsp;\"\";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;raw&nbsp;=&nbsp;Cryptography.AES_encrypt(sReplyMsg,&nbsp;m_sEncodingAESKey,&nbsp;m_sAppID);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch&nbsp;(Exception)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(int)WXBizMsgCryptErrorCode.WXBizMsgCrypt_EncryptAES_Error;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;MsgSigature&nbsp;=&nbsp;\"\";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;ret&nbsp;=&nbsp;0;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;=&nbsp;GenarateSinature(m_sToken,&nbsp;sTimeStamp,&nbsp;sNonce,&nbsp;raw,&nbsp;ref&nbsp;MsgSigature);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(0&nbsp;!=&nbsp;ret)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;ret;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sEncryptMsg&nbsp;=&nbsp;\"\";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;EncryptLabelHead&nbsp;=&nbsp;\"&lt;encrypt&gt;&lt;\/encrypt&gt;\";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;MsgSigLabelHead&nbsp;=&nbsp;\"&lt;msgsignature&gt;&lt;\/msgsignature&gt;\";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;TimeStampLabelHead&nbsp;=&nbsp;\"&lt;timestamp&gt;&lt;\/timestamp&gt;\";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;NonceLabelHead&nbsp;=&nbsp;\"&lt;nonce&gt;&lt;\/nonce&gt;\";\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sEncryptMsg&nbsp;=&nbsp;sEncryptMsg&nbsp;+&nbsp;\"&lt;xml&gt;\"&nbsp;+&nbsp;EncryptLabelHead&nbsp;+&nbsp;raw&nbsp;+&nbsp;EncryptLabelTail;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sEncryptMsg&nbsp;=&nbsp;sEncryptMsg&nbsp;+&nbsp;MsgSigLabelHead&nbsp;+&nbsp;MsgSigature&nbsp;+&nbsp;MsgSigLabelTail;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sEncryptMsg&nbsp;=&nbsp;sEncryptMsg&nbsp;+&nbsp;TimeStampLabelHead&nbsp;+&nbsp;sTimeStamp&nbsp;+&nbsp;TimeStampLabelTail;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sEncryptMsg&nbsp;=&nbsp;sEncryptMsg&nbsp;+&nbsp;NonceLabelHead&nbsp;+&nbsp;sNonce&nbsp;+&nbsp;NonceLabelTail;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sEncryptMsg&nbsp;+=&nbsp;\"&lt;\/xml&gt;\";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;DictionarySort&nbsp;:&nbsp;System.Collections.IComparer\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int&nbsp;Compare(object&nbsp;oLeft,&nbsp;object&nbsp;oRight)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;sLeft&nbsp;=&nbsp;oLeft&nbsp;as&nbsp;string;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;sRight&nbsp;=&nbsp;oRight&nbsp;as&nbsp;string;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;iLeftLength&nbsp;=&nbsp;sLeft.Length;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;iRightLength&nbsp;=&nbsp;sRight.Length;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;index&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(index&nbsp;&nbsp;sRight[index])&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index++;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;iLeftLength&nbsp;-&nbsp;iRightLength;\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/Verify&nbsp;Signature\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;int&nbsp;VerifySignature(string&nbsp;sToken,&nbsp;string&nbsp;sTimeStamp,&nbsp;string&nbsp;sNonce,&nbsp;string&nbsp;sMsgEncrypt,&nbsp;string&nbsp;sSigture)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;hash&nbsp;=&nbsp;\"\";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;ret&nbsp;=&nbsp;0;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;=&nbsp;GenarateSinature(sToken,&nbsp;sTimeStamp,&nbsp;sNonce,&nbsp;sMsgEncrypt,&nbsp;ref&nbsp;hash);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(ret&nbsp;!=&nbsp;0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;ret;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/System.Console.WriteLine(hash);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(hash&nbsp;==&nbsp;sSigture)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(int)WXBizMsgCryptErrorCode.WXBizMsgCrypt_ValidateSignature_Error;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;int&nbsp;GenarateSinature(string&nbsp;sToken,&nbsp;string&nbsp;sTimeStamp,&nbsp;string&nbsp;sNonce,&nbsp;string&nbsp;sMsgEncrypt,&nbsp;ref&nbsp;string&nbsp;sMsgSignature)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ArrayList&nbsp;AL&nbsp;=&nbsp;new&nbsp;ArrayList();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AL.Add(sToken);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AL.Add(sTimeStamp);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AL.Add(sNonce);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AL.Add(sMsgEncrypt);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AL.Sort(new&nbsp;DictionarySort());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;raw&nbsp;=&nbsp;\"\";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;p&gt;\u5728\u5904\u7406\u7a0b\u5e8f\u4e2d\uff0c\u9996\u5148\u83b7\u53d6\u5230\u516c\u4f17\u5e73\u53f0\u670d\u52a1\u5668\u53d1\u9001\u8fc7\u6765\u7684\u6570\u636e\uff0c\u5e76\u8f6c\u6210\u5b57\u7b26\u4e32\u3002\u4ee3\u7801\u5982\u4e0b&lt;\/p&gt;&lt;pre class=\"brush:c#;toolbar:false;\"&gt;string&nbsp;postStr&nbsp;=&nbsp;\"\";\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stream&nbsp;s&nbsp;=&nbsp;VqiRequest.GetInputStream();\/\/\u6b64\u65b9\u6cd5\u662f\u5bf9System.Web.HttpContext.Current.Request.InputStream\u7684\u5c01\u88c5\uff0c\u53ef\u76f4\u63a5\u4ee3\u7801\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;b&nbsp;=&nbsp;new&nbsp;byte[s.Length];\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.Read(b,&nbsp;0,&nbsp;(int)s.Length);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;postStr&nbsp;=&nbsp;Encoding.UTF8.GetString(b);<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u7136\u540e\u518d\u5206\u522b\u83b7\u53d6url\u4e2d\u7684\u53c2\u6570\uff1atimestamp\uff0cnonce\uff0cmsg_signature\uff0cencrypt_type\u3002\u53ef\u4ee5\u770b\u5230\uff0c\u5728\u660e\u6587\u6a21\u5f0f\u4e0b\u662f\u6ca1\u6709encrypt_type\u53c2\u6570\u7684\u3002\u5982\u56fe\uff1a<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/img.php.cn\/upload\/article\/000\/001\/505\/b4a2d467453fc5c64a4191d690a00167-0.png\" style=\"max-width:90%\" class=\"aligncenter\" title=\"\u5fae\u4fe1\u5f00\u53d1\u4e4b\u6d88\u606f\u4f53\u7b7e\u540d\u548c\u52a0\u89e3\u5bc6\u63d2\u56fe\" alt=\"\u5fae\u4fe1\u5f00\u53d1\u4e4b\u6d88\u606f\u4f53\u7b7e\u540d\u548c\u52a0\u89e3\u5bc6\u63d2\u56fe\" \/><\/p>\n<p>\u660e\u6587\u6a21\u5f0f<\/p>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/img.php.cn\/upload\/article\/000\/001\/505\/b4a2d467453fc5c64a4191d690a00167-1.png\" style=\"max-width:90%\" class=\"aligncenter\" title=\"\u5fae\u4fe1\u5f00\u53d1\u4e4b\u6d88\u606f\u4f53\u7b7e\u540d\u548c\u52a0\u89e3\u5bc6\u63d2\u56fe1\" alt=\"\u5fae\u4fe1\u5f00\u53d1\u4e4b\u6d88\u606f\u4f53\u7b7e\u540d\u548c\u52a0\u89e3\u5bc6\u63d2\u56fe1\" \/><\/p>\n<p>\u517c\u5bb9\u6a21\u5f0f\u548c\u5b89\u5168\u6a21\u5f0f<\/p>\n<p>\u517c\u5bb9\u6a21\u5f0f\u548c\u5b89\u5168\u6a21\u5f0f\u5219\u52a0\u5165\u4e86\u6d88\u606f\u4f53\u7684\u7b7e\u540d\u4e0e\u52a0\u5bc6\u7c7b\u578b\u4e24\u4e2a\u53c2\u6570\u3002<\/p>\n<p>\u7531\u4e8e\u5728\u5b9e\u9645\u7684\u8fd0\u8425\u4e2d\uff0c\u517c\u5bb9\u6a21\u5f0f\u4e0d\u592a\u53ef\u80fd\u4f7f\u7528\uff0c\u6240\u4ee5\u5728\u6b64\u4e0d\u505a\u8be6\u7ec6\u4ecb\u7ecd\u4e86\u3002<\/p>\n<p>\u63a5\u7740\u4e0a\u9762\u7684\u8bb2\u3002\u83b7\u53d6\u5230url\u4e2d\u7684\u53c2\u6570\u540e\uff0c\u5224\u65adencrypt_type\u7684\u503c\u662f\u5426\u4e3aaes\uff0c\u5982\u679c\u662f\u5219\u8bf4\u660e\u662f\u4f7f\u7528\u7684\u517c\u5bb9\u6a21\u5f0f\u6216\u5b89\u5168\u6a21\u5f0f\uff0c\u6b64\u65f6\u5219\u9700\u8c03\u7528\u89e3\u5bc6\u76f8\u5173\u7684\u65b9\u6cd5\u8fdb\u884c\u89e3\u5bc6\u3002<\/p>\n<pre>if&nbsp;(encrypt_type&nbsp;==&nbsp;\"aes\")\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;requestXML.IsAes&nbsp;=&nbsp;true;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;requestXML.EncodingAESKey&nbsp;=&nbsp;aeskey;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;requestXML.token&nbsp;=&nbsp;token;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;requestXML.appid&nbsp;=&nbsp;appid;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;ret&nbsp;=&nbsp;new&nbsp;MsgCrypt(token,&nbsp;aeskey,&nbsp;appid);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;r&nbsp;=&nbsp;ret.DecryptMsg(msg_signature,&nbsp;timestamp,&nbsp;nonce,&nbsp;postStr,&nbsp;ref&nbsp;data);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(r!=0)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WxApi.Base.WriteBug(\"\u6d88\u606f\u89e3\u5bc6\u5931\u8d25\");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u5426\u5219\u5219\u76f4\u63a5\u89e3\u6790\u63a5\u6536\u5230\u7684xml\u5b57\u7b26\u4e32\u3002<\/p>\n<p>\u4e0b\u56fe\u662f\u63a5\u6536\u5230\u7684\u5bc6\u6587\uff1a<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/img.php.cn\/upload\/article\/000\/001\/505\/81f174bf0940d077548f53e8104b9f46-2.png\" style=\"max-width:90%\" class=\"aligncenter\" title=\"\u5fae\u4fe1\u5f00\u53d1\u4e4b\u6d88\u606f\u4f53\u7b7e\u540d\u548c\u52a0\u89e3\u5bc6\u63d2\u56fe2\" alt=\"\u5fae\u4fe1\u5f00\u53d1\u4e4b\u6d88\u606f\u4f53\u7b7e\u540d\u548c\u52a0\u89e3\u5bc6\u63d2\u56fe2\" \/><\/p>\n<p>\u89e3\u5bc6\u4e4b\u540e\u7684\u5185\u5bb9\u5982\u4e0b\uff1a<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/img.php.cn\/upload\/article\/000\/001\/505\/a8233374031742a5255e4c8fbcdfd86d-3.png\" style=\"max-width:90%\" class=\"aligncenter\" title=\"\u5fae\u4fe1\u5f00\u53d1\u4e4b\u6d88\u606f\u4f53\u7b7e\u540d\u548c\u52a0\u89e3\u5bc6\u63d2\u56fe3\" alt=\"\u5fae\u4fe1\u5f00\u53d1\u4e4b\u6d88\u606f\u4f53\u7b7e\u540d\u548c\u52a0\u89e3\u5bc6\u63d2\u56fe3\" \/><\/p>\n<p>\u6b64\u65f6\u5c31\u53ef\u4ee5\u89e3\u6790\u6b64xml\u4e86\u3002<\/p>\n<p>\u5f53\u9700\u8981\u56de\u590d\u52a0\u5bc6\u7684\u8bf7\u6c42\u65f6\uff0c\u56de\u590d\u7684\u5185\u5bb9\u4e5f\u662f\u9700\u8981\u52a0\u5bc6\u7684\uff0c\u6240\u4ee5\u5728\u56de\u590d\u524d\u9700\u8981\u5224\u65ad\u6b64\u6761\u63a5\u6536\u5230\u7684\u6d88\u606f\u662f\u5426\u52a0\u5bc6\uff0c\u5982\u679c\u662f\u52a0\u5bc6\u7684\uff0c\u5219\u9700\u8981\u5c06\u9700\u8981\u56de\u590d\u7684\u5185\u5bb9\u52a0\u5bc6\u540e\uff0c\u518d\u8fdb\u884c\u56de\u590d\u3002\u56de\u590d\u6d88\u606f\u7684\u65b9\u6cd5\u5c06\u5728\u4e0b\u4e00\u7bc7\u4e2d\u5177\u4f53\u8bb2\u89e3\uff0c\u6b64\u7bc7\u53ea\u8bb2\u89e3\u52a0\u5bc6\u7684\u8fc7\u7a0b\u3002<\/p>\n<p>\u5904\u7406\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n<pre>private&nbsp;static&nbsp;void&nbsp;Response(WeiXinRequest&nbsp;requestXML,&nbsp;string&nbsp;data)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(requestXML.IsAes)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;wxcpt&nbsp;=&nbsp;new&nbsp;MsgCrypt(requestXML.token,&nbsp;requestXML.EncodingAESKey,&nbsp;requestXML.appid);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wxcpt.EncryptMsg(data,&nbsp;Utils.ConvertDateTimeInt(DateTime.Now).ToString(),&nbsp;Utils.GetRamCode(),&nbsp;ref&nbsp;data);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utils.ResponseWrite(data);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u5c06\u63a5\u6536\u5230\u7684\u6d88\u606f\u5b9e\u4f53\u548c\u9700\u8981\u56de\u590d\u7684\u5185\u5bb9xml\u4f20\u9012\u8fc7\u6765\uff0c\u5982\u679c\u662f\u52a0\u5bc6\u7684\uff0c\u5219\u52a0\u5bc6\u540e\u518dResponse\uff0c\u5426\u5219\u76f4\u63a5Response\u3002<\/p>\n<p>\u3010\u76f8\u5173\u63a8\u8350\u3011<\/p>\n<p>1.<\/p>\n<p>2.<\/p>\n<p>\u4ee5\u4e0a\u5c31\u662f\u5fae\u4fe1\u5f00\u53d1\u4e4b\u6d88\u606f\u4f53\u7b7e\u540d\u548c\u52a0\u89e3\u5bc6\u7684\u8be6\u7ec6\u5185\u5bb9\uff0c\u66f4\u591a\u8bf7\u5173\u6ce8\u7c73\u4e91\u5176\u5b83\u76f8\u5173\u6587\u7ae0\uff01<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; \u524d\u51e0\u7bc7\u4e3b\u8981\u662f\u5fae\u4fe1\u5f00\u53d1\u7684\u51c6\u5907\u5de5\u4f5c\uff0c\u4e5f\u6ca1\u6709\u4ec0\u4e48\u6280\u672f\u542b\u91cf\u3002\u5728\u7b2c\u4e00\u7bc7\u548c\u7b2c\u4e8c\u7bc7\u4e2d\uff0c\u6211\u4e3b\u8981\u8bb2\u7684\u662f\u4f7f\u7528\u82b1\u751f\u58f3\u6765\u914d\u5408vs\u8fdb\u884c\u4ee3\u7801\u8c03\u8bd5\uff0c\u4e5f\u4e00\u5ea6\u88ab\u56ed\u53cb\u5410\u69fd\u672c\u4eba\u662f\u82b1\u751f\u58f3\u8bf7\u6765\u7684\u9017\u6bd4\uff0c\u6ca1\u529e\u6cd5\uff0c\u4e3a\u4e86\u548c\u82b1\u751f\u58f3\u5212\u6e05\u754c\u9650\uff0c\u5728\u672c\u7bc7\u8fdb\u5165\u6b63\u6587\u524d\uff0c\u4e3a\u5927\u5bb6\u4ecb\u7ecd\u4e00\u4e2a\u6bd4\u82b1\u751f\u58f3\u66f4\u597d\u7528\u7684\u5de5\u5177ngrok\uff0cngrok\u7684\u597d\u5904\u6211\u5c31\u4e0d\u5728\u6b64\u5177\u4f53\u8bf4\u660e\u4e86\uff0c\u6bd5\u7adf\u4e0d\u662f\u672c\u6587\u7684\u91cd\u70b9 &nbsp;&nbsp; \u51fa\u4e8e\u5b89\u5168\u8003\u8651\uff0c\u5fae\u4fe1\u516c\u4f17\u5e73\u53f0\u572810\u6708\u4efd\u7684\u65f6\u5019\u52a0\u5165\u4e86\u6d88\u606f\u4f53\u7684\u52a0\u89e3\u5bc6\u529f\u80fd\uff0c\u9996\u5148\uff0c\u9700\u8981\u5148\u9a8c\u8bc1\u7b7e\u540d\uff0c\u7528\u4e8e\u516c\u4f17\u5e73\u53f0\u548c\u516c\u4f17\u8d26\u53f7\u9a8c\u8bc1\u6d88\u606f\u4f53\u7684\u6b63\u786e\u6027\uff0c\u5176\u6b21\uff0c\u9488\u5bf9\u63a8\u9001\u7ed9\u516c\u4f17\u53f7\u7684\u666e\u901a\u6d88\u606f\u548c\u6d88\u606f\uff0c\u4ee5\u53ca\u63a8\u9001\u7ed9\u8bbe\u5907\u516c\u4f17\u8d26\u53f7\u7684\u8bbe\u5907\u8fdb\u884c\u52a0\u5bc6\uff0c\u6700\u540e\uff0c\u516c\u4f17\u53f7\u5bf9\u5bc6\u6587\u6d88\u606f\u7684\u56de\u590d\u4e5f\u9700\u8981\u52a0\u5bc6\u3002\u542f\u7528\u52a0\u89e3\u5bc6\u529f\u80fd\u540e\uff0c\u516c\u4f17\u5e73\u53f0\u670d\u52a1\u5668\u5728\u5411\u516c\u4f17\u53f7\u670d\u52a1\u5668\u914d\u7f6e\u5730\u5740\u63a8\u9001\u6d88\u606f\u65f6\uff0curl\u5c06\u52a0\u4e24\u4e2a\u53c2\u6570\uff0c\u4e00\u4e2a\u662f\u52a0\u5bc6\u7c7b\u578b\u4e00\u4e2a\u662f\u6d88\u606f\u4f53\u7b7e\u540d\uff0c\u5e76\u4ee5\u6b64\u6765\u4f53\u73b0\u65b0\u529f\u80fd\u3002\u52a0\u5bc6\u7b97\u6cd5\u91c7\u7528AES\u3002\u5173\u4e8e\u660e\u6587\u6a21\u5f0f\uff0c\u517c\u5bb9\u6a21\u5f0f\uff0c\u7684\u8bf4\u660e\uff0c\u5927\u5bb6\u8bf7\u53c2\u8003\u5b98\u65b9\u6587\u6863. \u9a8c\u8bc1\u6d88\u606f\u771f\u5b9e\u6027\u548c\u52a0\u89e3\u5bc6\u7684\u5e2e\u52a9\u7c7b\u5b98\u65b9\u63d0\u4f9b\u7684\u6709demo\uff0c\u518d\u6b21\u4e0d\u8be6\u7ec6\u8bb2\u8ff0\u4e86\uff0c\u4e0b\u8f7d\u4e0b\u6765\u53ef\u4ee5\u76f4\u63a5\u8c03\u7528\uff0c\u4e0b\u9762\u8bf7\u770b\u4ee3\u7801\uff1a using&nbsp;System;using&nbsp;System.Collections.Generic;using&nbsp;System.Linq;using&nbsp;System.Text;using&nbsp;System.Security.Cryptography;using&nbsp;System.IO;using&nbsp;System.Net;namespace&nbsp;WxApi {&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;Cryptography &nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;UInt32&nbsp;HostToNetworkOrder(UInt32&nbsp;inval) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UInt32&nbsp;outval&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&amp;gt;&nbsp;(i&nbsp;*&nbsp;8))&nbsp;&amp;amp;&nbsp;255);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;outval; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;Int32&nbsp;HostToNetworkOrder(Int32&nbsp;inval) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int32&nbsp;outval&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&amp;gt;&nbsp;(i&nbsp;*&nbsp;8))&nbsp;&amp;amp;&nbsp;255);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;outval; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;summary&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;\u89e3\u5bc6\u65b9\u6cd5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;\/summary&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;param&gt;\u5bc6\u6587 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;param&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp;&lt;returns&gt;&lt;\/returns&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\/&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;string&nbsp;AES_decrypt(String&nbsp;Input,&nbsp;string&nbsp;EncodingAESKey,&nbsp;ref&nbsp;string&nbsp;appid) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;Key; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Key&nbsp;=&nbsp;Convert.FromBase64String(EncodingAESKey&nbsp;+&nbsp;&#8220;=&#8221;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;Iv&nbsp;=&nbsp;new&nbsp;byte[16]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Array.Copy(Key,&nbsp;Iv,&nbsp;16);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;btmpMsg&nbsp;=&nbsp;AES_decrypt(Input,&nbsp;Iv,&nbsp;Key);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;len&nbsp;=&nbsp;BitConverter.ToInt32(btmpMsg,&nbsp;16); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;len&nbsp;=&nbsp;IPAddress.NetworkToHostOrder(len);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;bMsg&nbsp;=&nbsp;new&nbsp;byte[len];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;bAppid&nbsp;=&nbsp;new&nbsp;byte[btmpMsg.Length&nbsp;&#8211;&nbsp;20&nbsp;&#8211;&nbsp;len]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Array.Copy(btmpMsg,&nbsp;20,&nbsp;bMsg,&nbsp;0,&nbsp;len); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Array.Copy(btmpMsg,&nbsp;20&nbsp;+&nbsp;len,&nbsp;bAppid,&nbsp;0,&nbsp;btmpMsg.Length&nbsp;&#8211;&nbsp;20&nbsp;&#8211;&nbsp;len);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;oriMsg&nbsp;=&nbsp;Encoding.UTF8.GetString(bMsg); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;appid&nbsp;=&nbsp;Encoding.UTF8.GetString(bAppid);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;oriMsg; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;String&nbsp;AES_encrypt(String&nbsp;Input,&nbsp;string&nbsp;EncodingAESKey,&nbsp;string&nbsp;appid) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;Key; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Key&nbsp;=&nbsp;Convert.FromBase64String(EncodingAESKey&nbsp;+&nbsp;&#8220;=&#8221;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;Iv&nbsp;=&nbsp;new&nbsp;byte[16]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Array.Copy(Key,&nbsp;Iv,&nbsp;16);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;Randcode&nbsp;=&nbsp;CreateRandCode(16);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;bRand&nbsp;=&nbsp;Encoding.UTF8.GetBytes(Randcode);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;bAppid&nbsp;=&nbsp;Encoding.UTF8.GetBytes(appid);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;btmpMsg&nbsp;=&nbsp;Encoding.UTF8.GetBytes(Input);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;bMsgLen&nbsp;=&nbsp;BitConverter.GetBytes(HostToNetworkOrder(btmpMsg.Length));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;bMsg&nbsp;=&nbsp;new&nbsp;byte[bRand.Length&nbsp;+&nbsp;bMsgLen.Length&nbsp;+&nbsp;bAppid.Length&nbsp;+&nbsp;btmpMsg.Length]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Array.Copy(bRand,&nbsp;bMsg,&nbsp;bRand.Length); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Array.Copy(bMsgLen,&nbsp;0,&nbsp;bMsg,&nbsp;bRand.Length,&nbsp;bMsgLen.Length); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Array.Copy(btmpMsg,&nbsp;0,&nbsp;bMsg,&nbsp;bRand.Length&nbsp;+&nbsp;bMsgLen.Length,&nbsp;btmpMsg.Length); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Array.Copy(bAppid,&nbsp;0,&nbsp;bMsg,&nbsp;bRand.Length&nbsp;+&nbsp;bMsgLen.Length&nbsp;+&nbsp;btmpMsg.Length,&nbsp;bAppid.Length);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;AES_encrypt(bMsg,&nbsp;Iv,&nbsp;Key); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;string&nbsp;CreateRandCode(int&nbsp;codeLen) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;codeSerial&nbsp;=&nbsp;&#8220;2,3,4,5,6,7,a,c,d,e,f,h,i,j,k,m,n,p,r,s,t,A,C,D,E,F,G,H,J,K,M,N,P,Q,R,S,U,V,W,X,Y,Z&#8221;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(codeLen&nbsp;==&nbsp;0) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;codeLen&nbsp;=&nbsp;16; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string[]&nbsp;arr&nbsp;=&nbsp;codeSerial.Split(&#8216;,&#8217;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;code&nbsp;=&nbsp;&#8220;&#8221;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;randValue&nbsp;=&nbsp;-1; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Random&nbsp;rand&nbsp;=&nbsp;new&nbsp;Random(unchecked((int)DateTime.Now.Ticks));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&nbsp;32) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pad&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;res&nbsp;=&nbsp;new&nbsp;byte[decrypted.Length&nbsp;&#8211;&nbsp;pad]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Array.Copy(decrypted,&nbsp;0,&nbsp;res,&nbsp;0,&nbsp;decrypted.Length&nbsp;&#8211;&nbsp;pad);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;res; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} } \u767b\u5f55\u540e\u590d\u5236 using&nbsp;System;using&nbsp;System.Collections.Generic;using&nbsp;System.Linq;using&nbsp;System.Text;using&nbsp;System.Xml;using&nbsp;System.Collections;\/\/using&nbsp;System.Web;using&nbsp;System.Security.Cryptography;\/\/-40001&nbsp;\uff1a&nbsp;\u7b7e\u540d\u9a8c\u8bc1\u9519\u8bef\/\/-40002&nbsp;:&nbsp;&nbsp;xml\u89e3\u6790\u5931\u8d25\/\/-40003&nbsp;:&nbsp;&nbsp;sha\u52a0\u5bc6\u751f\u6210\u7b7e\u540d\u5931\u8d25\/\/-40004&nbsp;:&nbsp;&nbsp;AESKey&nbsp;\u975e\u6cd5\/\/-40005&nbsp;:&nbsp;&nbsp;appid&nbsp;\u6821\u9a8c\u9519\u8bef\/\/-40006&nbsp;:&nbsp;&nbsp;AES&nbsp;\u52a0\u5bc6\u5931\u8d25\/\/-40007&nbsp;\uff1a&nbsp;AES&nbsp;\u89e3\u5bc6\u5931\u8d25\/\/-40008&nbsp;\uff1a&nbsp;\u89e3\u5bc6\u540e\u5f97\u5230\u7684buffer\u975e\u6cd5\/\/-40009&nbsp;:&nbsp;&nbsp;base64\u52a0\u5bc6\u5f02\u5e38\/\/-40010&nbsp;:&nbsp;&nbsp;base64\u89e3\u5bc6\u5f02\u5e38namespace&nbsp;WxApi {&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;MsgCrypt &nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;m_sToken;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;m_sEncodingAESKey;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;m_sAppID;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enum&nbsp;WXBizMsgCryptErrorCode &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WXBizMsgCrypt_OK&nbsp;=&nbsp;0, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WXBizMsgCrypt_ValidateSignature_Error&nbsp;=&nbsp;-40001, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19],"tags":[],"class_list":["post-30059","post","type-post","status-publish","format-standard","hentry","category-19"],"_links":{"self":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/30059","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/comments?post=30059"}],"version-history":[{"count":0,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/30059\/revisions"}],"wp:attachment":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/media?parent=30059"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/categories?post=30059"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/tags?post=30059"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}