什么是URL轉碼
不管是以何種方式傳遞url時,如果要傳遞的url中包含特殊字符,如想要傳遞一個+,但是這個+會被url會被編碼成空格,想要傳遞&,被url處理成分隔符。
尤其是當傳遞的url是經過Base64加密或者RSA加密后的,存在特殊字符時,這里的特殊字符一旦被url處理,就不是原先你加密的結果了。
如圖所示,訪問接口參數我傳遞參數為 1+1 結果瀏覽器顯示結果為 1 1 很明顯 '+' 被轉化成了空格。
轉碼之前訪問:
如果別人調用你接口傳遞的參數如果有特殊字符,那么你就需要進行轉碼進行處理,不然就會導致參數錯誤,如上圖所示。
解決方案:
public static void main(String[] args) {
//轉碼方法
String encode = URLEncoder.encode("1+1");
System.out.println("轉碼:" + encode);
//解碼方法
String decode = URLDecoder.decode(encode);
System.out.println("解碼:" + decode);
}
控制台輸出結果:
轉碼:1%2B1
解碼:1+1
轉碼之后訪問:
url特殊符號及對應的編碼:
符號 |
url中的含義 |
編碼 |
+ |
URL 中+號表示空格 |
%2B |
空格 |
URL中的空格可以用+號或者編碼 |
%20 |
/ |
分隔目錄和子目錄 |
%2F |
?
|
分隔實際的URL和參數 |
%3F |
% |
指定特殊字符 |
%25 |
# |
表示書簽 |
%23 |
& |
URL中指定的參數間的分隔符 |
%26 |
= |
URL中指定參數的值 |
%3D |
對稱加密與非對稱加密
對稱機密和解密都使用同一個密鑰。在加密解密過程中,使用同一個密鑰進行加解密。
為什么使用數據加密
PRC遠程調用的時候,保證數據安全性問題 針對數據進行加密。
防止別人抓包分析Http請求,獲取明文數據並進行篡改。可以使用 postman 發送請求,使用 fidder 進行抓包分析數據並篡改。
由上面的結果可以知道,我發送的請求 的參數為 xiaoming,經過抓包之后我篡改了數據 將參數修改為了 大白,數據就這樣被篡改了,所以我們在調用接口的時候應該避免出現這樣的請求。
未加密流程圖:
加密后流程圖:
常見的對稱加密技術
DES(數據加密標准):分組式加密,算法源於Lucifer,作為NIST對稱式加密標准;64位(有效位56位、校驗8位),分組算法
AES(高級加密標准):DES升級版,算法出自Rinjindael
3DES:128位,分組算法
IDEA(國際數據加密算法):128位,比DES快,分組算法
Blowfish:32-448位,算法公開,分組算法
RC4:流密碼,密鑰長度可變
RC5:分組密碼,密鑰長度可變,最大2048位
Rijndael:128位/196位/256位
對稱密碼的優點
用戶只需記憶一個密鑰,就可用於加密、解密;
與非對稱加密方法相比,加密解密的計算量小,速度快,簡單易用,適合於對海量數據進行加密處理 。
對稱密碼的缺點
如果密鑰交換不安全,密鑰的安全性就會喪失。特別是在電子商務環境下,當客戶是未知的、不可信的實體時,如何使客戶安全地獲得密鑰就成為一大難題。
如果用戶較多情況下的密鑰管理問題。N*(N-1)/2
如果密鑰多個用戶被共享,不能提供抗抵賴性
對稱加密使用場景:速度非常快。服務器與服務器端之間進行通訊。后台與后台進行通訊。
對稱密碼案例
假設Alice和Bob是認識的,兩人為了保證通信消息不被其它人截取,預先約定了一個密碼,用來加密在他們之間傳送的消息,這樣即使有人截取了消息沒有密碼也無法知道消息的內容。由此便實現了機密性。
1、密碼是不能夠使用對稱加密的,如果使用對稱加密會被反向破解出來的,按照互聯網隱私的情況下是不能夠反向解密的。
2、密碼使用單向加密的,單項加密特征:是不可以被逆向破解的。MD5 單向加密一般都會進行加鹽處理。
加鹽的目的:防止別人破解的,如果拿不到鹽值是無法破解的。
如何保證APP接口安全
使用Https傳輸、使用令牌、使用非對稱加密。Http+Json 方式進行數據傳輸。
移動App接口是不能使用對稱加密的。
因為對稱加密,密鑰都是相同的,如果黑客反編譯破解移動打包apk,就可以得到密鑰,然后拿到我們對應的參數,所以移動App不能使用對稱加密。
非對稱加密(公鑰與私鑰)
使用一對密鑰:一個用於加密信息,另一個則用於解密信息。可以使用第三方工具生成非對稱密鑰對。
兩個密鑰之間存在着相互依存關系:即用其中任一個密鑰加密的信息只能用另一個密鑰進行解密。
其中加密密鑰不同於解密密鑰,公鑰加密私鑰解密,反之也可私鑰加密公鑰解密。
密鑰依據性質划分,將其中的一個向外界公開,稱為公鑰;另一個則自己保留,稱為私鑰。公鑰(Public key)常用於數據加密(用對方公鑰加密)或簽名驗證(用對方公鑰解密),私鑰(Private key)常用於數據解密(發送方用接收方公鑰加密)或數字簽名(用自己私鑰加密)。
機密性、完整性、抗抵賴性
公鑰加密,私密解密(安全)。目前來說是最安全的加密手段,
缺點:效率低。
應用場景:第三方支付對接、核心的金融機構。
使用令牌方式實現參數傳遞安全方法