API合做商Key 生成祕鑰KEY 祕鑰是用來完成加密,解密的 API合做商KEY(生成祕鑰): DesKey 對稱加密:加解密是同一個密鑰,速度快,數據接收方須要公佈其私鑰給數據傳輸方,安全性徹底依賴於該密鑰。如AES,3DES,DES等,適合作大量數據或數據文件的加解密。php
非對稱加密:加密用公鑰,解密用私鑰。公鑰和私鑰是成對的(可藉助工具生成,如openssl等),即用公鑰加密的數據,必定能用其對應的私鑰解密,能用私鑰解密的數據,必定是其對應的公鑰加密。對大量數據或數據文件加解密時,效率較低。如RSA,Rabin等,數據接收方需公佈其公鑰給數據傳輸方,私鑰本身保留,安全性更高。html
API合做商簽名(加密參數) : Md5Key 參考: https://blog.csdn.net/hi_robert/article/details/74294495算法
關鍵字: 接口驗證 祕鑰編程
請求方,接口提供方api
參考: https://www.jianshu.com/p/d47da77b6419安全
在編程中:一個冪等操做的特色是: 其任意屢次執行所產生的影響均與一次執行的影響相同。服務器
AES 是一種對稱加密算法 plaintext 明文 , chipertext 密文微信
請求參數的鍵按天然的順序排序 app_key 應用鍵 (惟一) app_secret 應用祕鑰(惟一)app
用戶登陸憑證 token 應用憑證: app_token code ===0 成功,其它失敗 msg dataide
access_token 生成實例 應用ID 應用key providerid 1000000010 privatekey 0B1FC078-A244-4FAD-BECC-6255DDDE5236 四.接口參數key的生成規則 1.接口參數key的生成規則以下: 調用接口所須要的key定義爲key=md5(「userid={1}&providerid={2}&privatekey={3}」) 其中{1}爲要查詢或操做的id號,通常爲接口的第一個參數,如接口UserLogin爲用戶編號userid, {2}爲長寬分配給調用方的id, {3}爲長寬分配給調用方的key,id及key值參見附錄1.
2.測試案例: key=md5(「010010000101&providerid=1000000010&privatekey=0B1FC078-A244-4FAD-BECC-6255DDDE5236」) key=「68ABC26E8C5FE2F7A18C511522C93AF9」 還能夠加隨機字符串來加鹽
https://www.cnblogs.com/xiaochangwei/p/api.html 無狀態: 請求須要參數驗證,響應也是須要參數驗證的吧,得肯定參數沒有被修改 對請求的合法性進行校驗 對請求的數據進行校驗
signature 簽名,署名,信號 timestamp 60s之內有效 _t private_key 祕鑰 請求和響應都須要加一個簽名參數
設全部發送或者接收到的數據爲集合M,將集合M內非空參數值的參數按照參數名ASCII碼從小到大排序(字典序),使用URL鍵值對的格式(即key1=value1&key2=value2…)拼接成字符串stringA。
特別注意如下重要規則:
◆ 參數名ASCII碼從小到大排序(字典序); ◆ 若是參數的值爲空不參與簽名; ◆ 參數名區分大小寫; ◆ 驗證調用返回或微信主動通知簽名時,傳送的sign參數不參與簽名,將生成的簽名與該sign值做校驗。 ◆ 微信接口可能增長字段,驗證簽名時必須支持增長的擴展字段 第二步,在stringA最後拼接上key獲得stringSignTemp字符串,並對stringSignTemp進行MD5運算,再將獲得的字符串全部字符轉換爲大寫,獲得sign值signValue。
SecretId:用於標識 API 調用者身份; SecretKey:用於加密簽名字符串和服務器端驗證簽名字符串的密鑰。
HmacSHA1 $secretKey = 'Gu5t9xGARNpq86cd98joQYCN3Cozk1qA'; $srcStr = 'GETcvm.api.qcloud.com/v2/index.php?Action=DescribeInstances&InstanceIds.0=ins-09dx96dg&Nonce=11886&Region=ap-guangzhou&SecretId=AKIDz8krbsJ5yKBZQpn74WFkmLPx3gnPhESA&SignatureMethod=HmacSHA1&Timestamp=1465185768'; $signStr = base64_encode(hash_hmac('sha1', $srcStr, $secretKey, true)); echo $signStr;
微信支付API接口協議中包含字段nonce_str,主要保證簽名不可預測。咱們推薦生成隨機數算法以下:調用隨機數函數生成,將獲得的值轉換爲字符串。
值爲null,簽名參數不參與簽名計算
參數值 ===null 不參與簽名,爲何了? 響應data參數也不參與簽名
共享錢包: MD5(agentName+API key + 隨機字符串) 代理名稱+私鑰+隨機字符串 最好加上時間戳吧
sha1withrsa sha256withrsa
RSA2是在原來SHA1WithRSA簽名算法的基礎上,新增了支持SHA256WithRSA的簽名算法 RSA2 OPENSSL_ALGO_SHA256 RSA OPENSSL_ALGO_SHA1
https://blog.csdn.net/u014377963/article/details/71775171 if("RSA2"==$this->sign_type){
openssl_sign($data, $signature, $private_id, OPENSSL_ALGO_SHA256 ); }else{ openssl_sign($data, $signature, $private_id, OPENSSL_ALGO_SHA1 ); }