必須知道MD5是不可逆性
在講解MD5簽名原理之前,必須明白MD5是不可逆的刚照,也就是不可破解的宙地,當(dāng)然可能稍有了解的人會說MD5可以破解摔认,當(dāng)然,網(wǎng)上也有一些強大的數(shù)據(jù)庫會把各種數(shù)據(jù)組合的MD5收集起來形成強大的數(shù)據(jù)庫宅粥,能冠軍數(shù)據(jù)庫搜索可能一些簡單的數(shù)據(jù)會馬上找出某些組合對應(yīng)的MD5值参袱,但咱說的MD5簽名生成是最少32位的數(shù)值MD5加密,所以這個破解的可能性是非常非常非常小的秽梅。所以這還是比較安全的抹蚀。
原理
原理很簡單,請求方對請求數(shù)據(jù)按一定的規(guī)則排序企垦,加上appkey碼一起通過MD5加密生成簽名环壤,然后把請求數(shù)據(jù)和簽名發(fā)給服務(wù)方,服務(wù)方拿到數(shù)據(jù)后钞诡,去掉appid和無用的數(shù)據(jù)郑现,通過appid找到請求方的appkey,然后按同樣的規(guī)則處理數(shù)據(jù),并加上appkey通過MD5加密也生成簽名荧降,然后和請求方生成的簽名去對比接箫,如果值一樣,簽名驗證通過朵诫。
需要的東西
服務(wù)商一般會給你一個appid辛友,appkey;同時這兩個參數(shù)服務(wù)商也會保存剪返,這兩個形成了你的唯一標(biāo)識废累。
appid通過網(wǎng)絡(luò)傳輸邓梅,而appkey是不在網(wǎng)絡(luò)上進(jìn)行傳輸?shù)模辉谏珊灻麜r使用九默,所以安全性還是比較高的。
MD5生成簽名的流程
1. 除去加密數(shù)組中的空值和簽名參數(shù)
2. 對數(shù)組排序
3. 把數(shù)組所有元素宾毒,按照“參數(shù)=參數(shù)值”的模式用“&”字符拼接成字符串
4. 加上appkey值驼修,對形成的數(shù)據(jù)進(jìn)行MD5加密,生成簽名
下面是各步聚的PHP代碼
1. 除去加密數(shù)組中的空值和簽名參數(shù)
2. 對數(shù)組排序
3.把數(shù)組所有元素诈铛,按照“參數(shù)=參數(shù)值”的模式用“&”字符拼接成字符串
4.加上appkey值乙各,對形成的數(shù)據(jù)進(jìn)行MD5加密,生成簽名
看實例更清晰
比如我要拿下面數(shù)據(jù)去服務(wù)方接口請求:
-
第一步會把請求數(shù)組中的空值幢竹,或者沒必要的參數(shù)都去掉耳峦,得到了下面的數(shù)據(jù),這才是真正的需要的靈數(shù)據(jù)焕毫。
最詳細(xì)的MD5簽名的原理和流程 -
然后對數(shù)組進(jìn)行排序蹲坷,得到下面的結(jié)果。
最詳細(xì)的MD5簽名的原理和流程 -
然后對數(shù)組進(jìn)行拼接邑飒,得到下在結(jié)果
最詳細(xì)的MD5簽名的原理和流程 -
然后加上appkey生成最終的簽名循签。
最詳細(xì)的MD5簽名的原理和流程 -
最后在原始數(shù)據(jù)后面加上生成的簽名,就是最終要傳給用戶的數(shù)據(jù)疙咸,紅圈里的是最后加上的簽名县匠。
最詳細(xì)的MD5簽名的原理和流程 - 客戶收到數(shù)據(jù)后會拿數(shù)據(jù)去按上面方法處理,最后把生成的簽名值撒轮,和你的$data['sign']進(jìn)行比較乞旦,如果值一樣,簽名通過题山。