RSA和MD5加密

不知不覺項目已經作了一年多了,從一開始簡單的業務實現,到如今各個版本,各個終端並行升級的平臺,項目已經逐步進入平穩發展的階段。這時系統安全問題也就顯得愈發重要。算法

接口部分最開始返回值沒有加密,APP也沒有對返回結果作任何驗證,終於線上項目的一些漏洞被用戶證明了,後面又有專家對咱們系統的安全性能進行檢測,結果很糟糕,這一系列事情引發了領導的重視。後面經理決定從最新版本開始對接口返回值加密。系統以前的請求參數一直是加密的,因此返回值加密和請求參數一致,用對等加密。安全

後面我再看了一下支付寶下單接口sign字段的生成是用的RSA加密,微信下單sign字段用的是md5加密,出於好奇,就去查了資料,看看這些加密。服務器

sign字段的做用就是驗證對方的身份和防止數據被篡改。微信

RSA加密屬於非對等加密,用戶須要設置公鑰,用戶用私鑰加密後,支付寶後臺用公鑰解密,將解密後的參數與傳過來的參數進行對比達到驗證的做用。支付寶返回值也是用他的私鑰加密,用戶再用公鑰解密。app

MD5加密屬於對等加密,md5加密是不可逆的,因此也是比較安全的。雙方面使用一個key進行加密驗證。發送者使用md5加密後,接收者把接收到的參數進行md5加密,再和收到的sign字段對比,達到驗證的做用。支付寶的無密接口也提供了md5加密方式,想必是這種加密方式簡單一些,適合多參數加密,而RSA加密解密算法相對複雜。性能

回過頭想一下咱們本身的系統,我以爲能夠用RSA加密方式作驗證,只需向app提供公鑰,服務器本身保留私鑰。APP向服務器請求是能夠不作簽名驗證,沒意義,只對參數的合理性作驗證就夠了。。若是服務器接收請求時也須要對請求參數作簽名驗證,那發送者也應該有本身的私鑰,並要把公鑰傳到服務器。涉及到支付等重要數據的請求最好應該做簽名驗證。加密

目前咱們系統對因此返回值都加密了,其實我以爲大可不必,只須要對一些包含重要信息的接口進行加密,好比請求支付返回的數據,而像查詢商品列表,詳情等接口徹底不須要加密,下降了效率。接口

相關文章
相關標籤/搜索