簽名設計+數據加密設計

一 簽名設計

1.1簽名生成的步驟如下:

  1. 參數名ASCII碼從小到大排序(字典序)

    1. 案例
      1. buid=12&accoutid=0 —> accoutid=0&buid=12
  2. 請求參數使用URL鍵值對的格式(key1=value1&key2=value2…)拼接成字符串st1

    1. 案例
      1. st1=“accoutid=0&buid=12”;
  3. 拼接API密鑰st2

    1. 案例
      1. st2=st1+"&key=“商戶平臺的密鑰”
  4. 獲取簽名

    1. 案例
      1. psign=MD5(st2)=“xxxx”
  5. 最終發送的數據

    1. 案例
      1. accoutid=0&buid=12&psign=xxxx

1.2最終發送的數據

key1:value1
key2:value2
time:請求的時間戳(毫秒)
psign:xxxx

1.3注意點:

  1. 如果參數的值爲空不參與簽名
  2. 參數名ASCII碼從小到大排序
  3. 參數名區分大小寫
  4. 用戶的請求參數必須帶上時間戳,參數名稱time

1.4測試工具

在線md5計算:https://oktools.net/hash

1.5操作截圖

  1. 請求參數:time=1569728170000&userId=1111
  2. 參數名ASCII碼從小到大排序,拼接API密鑰st2,獲取簽名
    1. 測試的商戶平臺的密鑰:xxxxoooo
      在這裏插入圖片描述

2 簽名加密設計

  1. 使用公鑰對psign加密
    1. 測試公鑰:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJWRN/d5SnaLyniXA9XObOYS5wDzfuR1Mw/o010mrMOI2mauWlYHrQyTjffJuWy5K+1YLvdq+6SoW48PnlHpPmECAwEAAQ==

2.1操作截圖

在這裏插入圖片描述

3 最終發送的數據

time=1569728170000&userId=1111&psign=F2UyJKhmWS51M0tF5oxetSGVQAZGZ8MeZ3TCp+2LR1kvKW1QBbUe/eBXSb2nYobjXJOROGOGEpk1d0qiMdlFkg==
在這裏插入圖片描述

二 數據加密(涉及加簽)設計

客戶端

  1. 對所有的參數加簽psign,具體看簽名設計
    1. 數據防篡改
  2. 使用公鑰對psign加密(非對稱加密)
    1. 防止惡意用戶破解,獲取到簽名的key(商戶平臺的密鑰)

服務端

  1. 獲取psign的hashcode,對比redis服務器中是否存在,存在就不執行,過期時間60分鐘
    1. 防止惡意用戶,截取到我們的網絡請求,做重複提交(間隔時間重複提交)
    2. hashcode: redis的處理速度最快的方式(redis key 設計)
  2. 使用私鑰對psign解密,解密失敗不執行
    1. 獲取真正的簽名real_psign
  3. 使用psign驗證防篡改,篡改不執行
    1. 使用請求參數生成簽名(按照簽名規則)
    2. 對比real_psign簽名,看2個簽名是否相等
      1. 相等:數據沒有篡改
      2. 不相等:數據別篡改了
  4. 解析time和服務器當前服務器時間,間隔10分鐘以上的不執行
    1. 第二次防止惡意用戶,截取到我們的網絡請求,做重複提交(間隔60分鐘以上重複提交),因爲redis保存的緩存,過期時間是60分鐘。如果沒有做這個處理,惡意用戶可以截取網絡請求, 間隔60分鐘以後做重複提交。

三具體代碼實現

https://blog.csdn.net/zhou920786312/article/details/101691311 私密,不公開

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章