最近在專案介面測驗中使用postman,對于一般的非加密HTTP請求可以很方便直接的測驗,但是有些需要簽名驗簽的報文,就需要對報文進行加解密處理,在實際作業程序中,參考了網路上共享的資源,下面對自己作業程序做一次記錄,以及自己遇到的問題進行補充,
大體說一下流程:
請求的源報文需要把引數(除sign)按照字母從a-z順序先進行排序;
對排序后引數的值拼接成字串即成源字串;
用對方的RSA私鑰對源字串進行RSA演算法加密生產簽名sign值;
把該值傳遞給引數sign,對新的報文進行AES簽名得到值作為正式報文中的引數encdata的值;
使用自有RSA公鑰對AES密碼進行RSA演算法簽名,得到的值作為正式報文enckey的值,新的報文生產后再發起HTTP請求,
最終的報文結構:
"{{encdata}}"、"{{enckey}}"需要在postman中定義的變數,變數定義設定不在這里詳細說明,
引入forge.js
因為postman自帶的加密函式是cryptoJS,不能滿足數字RSA-SHA1簽名,即java里的SHA1WithRSA,因此需要接入第三方庫,這里找到forge.js,forge的GitHub地址https://github.com/digitalbazaar/forge,
Forge.js兩種使用方式,第一種:需要下載forge.js并在本地搭建服務,在加密程序中需要呼叫該服務,
在Pre-request Script中使用:
第二種使用方式,復制forge.js檔案的所有內容,在postman中添加forgeJS變數,值設定為forge.js檔案中的所有內容,
這里使用的第一種搭建服務的方法,因為第二種方法forge.js檔案太大,導致設定變數時卡死,
對源字串進行RSA簽名
具體的報文拼接就不再這里詳細說明,假如拼接后的源字串為“15547905120004109231993051800161200155235582900015011385365”,然后使用RSA進行私鑰簽名,
這里的encrypt_key私鑰,你需要換成自己專案的私鑰,
Encryption函式實作私鑰簽名,使用了forge專案中的
獲取的簽名sign需要進行Bate64編碼,使用forge.util.encode64(sig)實作,
在我們專案中,實際獲取的sText簽名需要傳遞給源報文引數sign,進行AES加密,
var signText = '{"endDate":1554790512000,"pageNo":1,"Id":"410923199305180016","userPhone":"15011385365","sign":"'+sText+'","pageSize":200,"startDate":1552355829000}';
RSA簽名就寫這些,接下來寫AES加密,
如果你不想再體驗一次自學時找不到資料,沒人解答問題,堅持幾天便放棄的感受的話,可以關注我一起討論,
給大家推薦一個軟體測驗技術交流群:1079636098 群友福利免費領取
【軟體測驗流程圖總結】
公眾號【程式員一凡】
加油吧,測驗人!路就在腳下,成功就在明天!
未來的你肯定會感謝現在拼命的自己!
愿你我相遇,皆有所獲! 歡迎關注微信公眾號:程式員一凡
1.免費領取一份216頁軟體測驗工程師面試寶典檔案資料,
2.軟體測驗學習路線以及相對應的視頻學習教程免費分享!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/248001.html
標籤:其他
