S = key + url_encode(path) + T簽名 SIGN = md5(S).to_lower(),to_lower 指將字符串轉換為小寫; 一般會這樣簽名API接口開發時,如果考慮到接口的安全和參數不可串改,通常做法一般是吧參數通過 一定的算法簽名后把簽名的 sign 值一起發給服務端,這樣服務端也根據除去 sign 參數,把所有參數也經過簽名后,判斷客服端傳遞的 簽名是否匹配。這樣就解決了,但是有個問題,簽名算法基本都一樣,能做的就是簽名時加上一個 key 值,但是這個key值放在客戶端怎么保證安全呢。比如放在 web 端,js 代碼是直接可以看得,這樣肯定不安全,放在 android 上面貌似也不安全,因為 apk 是可以反編譯的。有小伙伴解決過這個問題的么?
2 回答

紫衣仙女
TA貢獻1839條經驗 獲得超15個贊
首先要確定sign
是干什么的。
sign
的主要目的是保證數據的完整性,防止在網絡傳輸的過程中篡改數據。
name=kevinheight=170key=$$key$$
假如上面的數據簽名字符串是 name=kevin&height=170$$key$$
簽名結果是 c5c05d54d25791b0551b25a482d8c2e2
。這個 key
在客戶端是可見,別人也可以輕易拿到這個參數。
但是拿到這個key
又有什么意義呢?
因為key
是不會在網絡中進行傳輸的,所以服務器最終生成簽名的key
還會是使用$$key$$
,即使你修改了數據,也修改了客戶端的key
但是你沒有修改掉服務器的key
,最后服務器還會按照自己的方式生成sign
。如果你修改了數據,最終也只是簽名結果不一致而已。

守著一只汪
TA貢獻1872條經驗 獲得超4個贊
sign里存放的都是保密信息,比如用戶的id或者其它用于驗證api合法性的參數
接口的請求參數一般是不放在sign里的,直接明文傳輸用https加密通信過程就可以
sign是服務端加密后傳給客戶端存放,在請求api時帶到服務端驗證身份合法性的,里面不會有接口的請求信息,這兩個是要分開的
- 2 回答
- 0 關注
- 803 瀏覽
添加回答
舉報
0/150
提交
取消