本發明涉及服務端與客戶端傳輸信息安全領域,特別是一種高效安全的網絡通信方法。
背景技術:
隨著互聯網技術日益發展,手機應用軟件越來越多,自然而然帶來了很多網絡信息傳輸問題:
一是客戶手機上數據在網絡傳輸過程中有可能被截取,并且盜用客戶信息;
二是客戶通信內容有可能是特殊字符,帶來通信亂碼問題;
三是客戶信息內容多,會導致給客戶帶來大量網絡流量和通信慢的問題;
為了解決高效網絡通信問題,需要一種高效安全的網絡通信的方法,從而解決信息通信安全問題,信息量大導致的流量問題等。
技術實現要素:
本發明解決的技術問題在于提供一種高效安全的網絡通信方法;解決客戶發送信息安全和傳輸大信息量問題,也提防了客戶非法請求和重復提交,確保了客戶信息不受泄露,高效通信,提高系統的可靠性。
本發明解決上述技術問題的技術方案是:
所述的方法是用戶登陸成功之后生成一串有生存時間的證書,客戶端先對要傳輸的內容、證書和當前時間戳進行加密,加密后的密文再進行壓縮,最后對壓縮后的密文進行URL安全的Base64編碼,再發送到服務端;服務端接收之后,先進行URL安全的Base64解碼,再解壓和解密,獲取到證書之后,對證書進行校驗,校驗成功之后,再對時間戳進行判斷是否已經請求,如果沒有請求,則記錄改時間戳到服務器上,防止請求重復提交。
所述的方法包括如下具體步驟:
步驟1:客戶登錄認證獲取證書字符串;
步驟2:通過DES的私鑰加密信息內容、證書和當前時間戳;
步驟3:通過RSA的公鑰加密DES的私鑰;
步驟4:將信息密文和私鑰密文進行GZIP壓縮;
步驟5:進行URL安全的Base64編碼;
步驟6:發送到服務端;
步驟7:服務端將密文進行GZIP解壓;
步驟8:進行URL安全的Base64解碼;
步驟9:通過服務端RSA私鑰解密DES私鑰密文;
步驟10:通過DES私鑰解密信息密文;
步驟11:校驗證書是否有效,證書無效則結束;
步驟12:根據證書和時間戳判斷接口是否重復提交,如果是則請求無效結束;
步驟13:記錄改時間戳到數據庫上;
步驟14:請求完成。
所述證書字符串是基于redis緩存機制的key,并且該key帶有生存時間;
所述DES是一種使用密鑰加密的對稱加密算法,通過私鑰可以進行加密和解密;
所述RSA是一種公鑰加密算法,是一種非對稱加密算法,通過公鑰進行加密,然后再通過私鑰進行解密;
所述GZIP是一個GNU自由軟件的文件壓縮程序,可以對字符串進行壓縮;
所述URL安全的Base64是將二進制轉碼成可見字符方便進行http傳輸,base64轉碼時會生成″+″,″/″,″=″這些被URL進行轉碼的特殊字符,URL安全的Base64可以將編碼中的″-″,″_″字符串轉換成″+″,″/″,字符串長度余4倍的位補″=″;
所述時間戳是通常是一個字符序列,唯一地標識某一刻的時間。
本發明通過在客戶端對內容進行用戶認證,多重加密,編碼,壓縮來實現高效和安全的網絡通信。本發明給當前飛速發展的互聯網通信提供有力支持,與目前市場上的系統提供的單一加密算法比較起來,本發明提供了接口的時效性,信息的安全性,傳輸的高效性,更好地適應當前互聯網傳輸步伐,為以后更高速的網絡傳輸打下堅實的基礎。本發明解決了客戶發送信息安全和傳輸大信息量問題,也提防了客戶非法請求和重復提交,確保了客戶信息不受泄露,高效通信,提高系統的可靠性,增大了信息傳輸安全性。
附圖說明
下面結合附圖對本發明進一步說明:
圖1為本發明方法流程圖。
具體實施方式
如圖1所示,本發明的是用戶登陸成功之后生成一串有生存時間的證書,客戶端先對要傳輸的內容、證書和當前時間戳進行加密,加密后的密文再進行壓縮,最后對壓縮后的密文進行URL安全的Base64編碼,再發送到服務端;服務端接收之后,先進行URL安全的Base64解碼,再解壓和解密,獲取到證書之后,對證書進行校驗,校驗成功之后,再對時間戳進行判斷是否已經請求,如果沒有請求,則記錄改時間戳到服務器上,防止請求重復提交。具體包括如下步驟:
步驟1:客戶登錄認證獲取證書字符串;
步驟2:通過DES的私鑰加密信息內容、證書和當前時間戳;
步驟3:通過RSA的公鑰加密DES的私鑰;
步驟4:將信息密文和私鑰密文進行GZIP壓縮;
步驟5:進行URL安全的Base64編碼;
步驟6:發送到服務端;
步驟7:服務端將密文進行GZIP解壓;
步驟8:進行URL安全的Base64解碼;
步驟9:通過服務端RSA私鑰解密DES私鑰密文;
步驟10:通過DES私鑰解密信息密文;
步驟11:校驗證書是否有效,證書無效則結束;
步驟12:根據證書和時間戳判斷接口是否重復提交,如果是則請求無效結束;
步驟13:記錄改時間戳到數據庫上;
步驟14:請求完成。
各關鍵部分的代碼如下:
獲取服務端解密代碼:
Base64解密代碼:
DES解密代碼:
RSA解密代碼:
GZIP數據解壓縮代碼:
public static byte[]decompress(byte[]data)throws IOException{
ByteArrayInputStream bais=new ByteArrayInputStream(data);
ByteArrayOutputStream baos=new ByteArrayOutputstream();
decompress(bais,baos);
data=baos.toByteArray();
baos.flush();
baos.close();
bais.close();
return data;
}。