數據信息安全對我們每個人都有著重要的意義。從接觸互聯網開始,我就明白了數據的重要性。我對數據安全有極高的要求。毫不誇張的說,我的電話從來沒有接到過推銷電話和騷擾電話。我個人很討厭這種事情,很討厭買賣數據,泄露數據。從做金融開始,我對數據安全有了新的認識。接手了幾個支付渠道,了解了支付業務,根據業務需求開始寫支付外發接口。說實話,安全設計讓我很頭疼。壹開始我用MD5加密對消息進行加密,得到壹個簽名字符串,簽名字符串= MD5(original & amp;Key),如果黑客截獲消息並篡改,服務器將無法通過簽名驗證,因為消息發生變化,計算出的簽名串也會發生變化,黑客需要重新計算簽名串。為了計算簽名字符串,他需要知道加密規則和密鑰。雖然這種方法保證了安全性,但是有壹個問題。消息暴露,黑客不更改數據。他只是記錄並保存妳暴露的數據。這也是很危險的。經過學習和借鑒,采用了另壹種解決方案。為了保證接口調用過程中消息的完整性,消息采用MD5簽名算法,為了保證接口調用過程中用戶敏感信息的保護,對涉及用戶敏感信息的字段(如賬號、姓名、手機號等)進行AES加密。).
采用MD5(數據+" &;Key="+md5Key)。toUpperCase()簽名,其中:md5Key是自己指定的MD5簽名密鑰。最後,將獲得的簽名字符串轉換為大寫。設所有發送或接收的數據為集合M,將集合M中參數值非空的參數按照參數名ASCII碼(字典順序)從小到大排序得到壹個字符串,使用URL鍵-值對的格式(即key 1 = value 1 &;鍵2 =值2...)轉換成字符串數據。在數據的末尾,拼接密鑰並對其進行MD5運算,然後將得到的字符串的所有字符轉換為大寫,得到簽名值。
AES加密模式為“AES/ECB/PKCS5Padding”,加密數據用AESKey加密後由Base64獲得。AESKey的長度為16位,由26個字母和數字組成。
博客原址:消息加密和簽名設計