關於引數簽名的總結

2021-07-30 17:38:53 字數 2985 閱讀 8854

引數簽名 這是我們今天討論的重點

引數簽名可以保證開發的者的資訊被冒用後,資訊不會被洩露和受損。原因在於接入者和提供者都會對每一次的介面訪問進行簽名和驗證。下面我們就簡述下這個過程。

可以這樣理解接入者把需求訪問的介面的所有必要的引數資訊(一般都會有乙個accesskey_id,用於標示接入者的資訊,一般都是接入者的id或是其唯一標示,還會有隨機字串和時間戳,是為了防止被重放)按照字母順序拼接成字串(防止引數亂序之後,造成加密不一致的問題),urlencode(標準的http傳輸規範),base64編碼(將非ascii字元的資料轉換成ascii字元,有效降低 %xx 的出現次數) 之後再和提供者提供的乙個secret_key,這個secret_key只有接入者和提供者知道,進行加密或是摘要(用md5或是sha1摘要的比較多),然後當做乙個新的引數sign發給提供者。提供者接收到這些資訊後首先取到accesskey_id 進行接入者的身份判斷,取到使用者的secret_key,然後取得所有的引數(去除sign欄位),按照字母的順序拼接成字串,base64之後再和secret_key 進行和開發者相同的加密方式也得到sign 字段,和開發者傳來的sign進行比較,如果相等則證明是合法的接入者的一次正常的呼叫請求,其中也會校驗是否被重放(會記錄一些改使用者的訪問引數資訊,會驗證隨機字串和時間戳短時間內是否一致,防止被重放),驗證通過,正常返回業務請求的資訊,如果不匹配那麼久證明是有人篡改了引數資訊企圖攻擊,就不予通過,返回錯誤。一般的還會有記錄黑名單的功能。這樣即使接入者的資訊洩露了(accesskey_id),攻擊者隨意修改引數也是無效的了。還是需要有技術成本的。

以上我們大致說明了引數簽名的意義和開發者和提供者的流程,(有些支付還需在控制台填寫特殊的字串用作第二次匹配使用,但是思路還是一樣的。)我想看到這讀者一定對簽名的意義和作用有了了解,明白了為什麼大型的**針對安全方面要做引數簽名了。

//最後拼接簽名

以上是呼叫的核心**,提供者接到後其實流程也差不多的。本文的目的在於總結下這幾年呼叫第三方服務的一些心得和一些積累。為了讓和我一樣的新手們能對安全有些認識。最後感謝大家能看到最後。如果有什麼不對或是說的不明的地方還請大家多多指出。

防盜煉之URL引數簽名 總結

傳統的 ip 禁用 referer 防盜煉 user agent 防盜煉 地區訪問控制等防盜煉措施已經無法完全滿足使用者要求,所以開發出url引數簽名方式來防盜煉 token防盜鍊是通過對時間有關的字串進行簽名,將時間 簽名資訊通過一定的方式傳遞給 web server節點伺服器作為判定依據,web...

關於方法簽名

方法簽名是用方法名和它的引數標示的,返回型別並不算在內,子類覆蓋父類的乙個方法需要返回型別 方法名 引數都相同,這是jdk1.5之前的規定,在jdk1.5中,有了這樣的允許 允許子類將覆蓋方法的返回型別定義為原放回型別的子型別如 父類中有 public employee getbuddy 假定man...

簽名指令總結

jarsigner verbose keystore 簽名檔案路徑 storepass 簽名檔案密碼 signedjar 簽名apk位址 加固後apk位址 簽名檔案別名 簽名檔案別名例如 key alias key0 keytool list v keystore 簽名檔案路徑 storepass ...