為什么要進行數據加密?
數據加密的基本過程就是對原來為明文的文件或數據按某種算法進行處理,使其成為不可讀的一段代碼,通常稱為“密文”,使其只能在輸入相應的密鑰之后才能顯示出本來內容,通過這樣的途徑來達到保護數據不被非法人竊取、閱讀的目的。 該過程的逆過程為解密,即將該編碼信息轉化為其原來數據的過程。
加密算法分類:
- 加密操作類型:
- 代換
- 置換
- 多重加密
- 所用的密鑰個數
- 對稱加密算法
- 公開加密算法
一:對稱加密算法
亦稱為常規/單密加密
發送方和接收方共享相同的密鑰
所有經典加密都是對稱加密,是在20世紀70年代公鑰加密之前僅有的加密類型
針對數據加密的攻擊手段
- 密碼分析
從數學的角度分析密碼算法
- 強力攻擊
逐次試用每個密鑰進行解密,直至有意義的信息出現

加密算法的安全性
- 無條件安全
- 無論提供的密文有多少,如果由一個加密方案產生的密文中包含的信息不足以唯一地決定對應的明文
- 除了一次一密的方案外,沒有無條件安全的算法
- 計算上安全
- 破譯密碼的代價超出密文信息的價值
- 破譯密碼的事件超出密文信息的有效生命期
密鑰設置建議:
足夠長,包含數字、字母和其他符號 ,經常更換
DES加密算法過程:

其他現代對稱加密算法:三重DES、Blowfish、RC5、IDEA、AES(對於幾種加密算法的內部實現原理,我不想研究的太透徹,這些問題就留給科學家們去研究吧).
對稱加密算法存在的問題:
無法保護發送方,如果接收方偽造一個消息並宣稱是由發送方發送的
密鑰的分配:在建立安全通道前,如何安全交換密鑰?(先有雞,?還是先有蛋的問題)
二:公鑰(非對稱)加密算法算法
使用兩個密鑰:一個公鑰、一個私鑰
不對稱:因為雙方是不平等的
巧妙使用了數論概念
與對稱加密是互相補充,而不是替代
需要使用很大的數和較復雜的運算,因此與對稱密鑰相比,較慢
對稱加密與公鑰加密比較

三:加密算法在實際開發中使用
因為對稱加密算法在傳輸的過程中,不能保證私鑰的安全,同時非對稱加密在性能上又比較耗時。所以這兩類算法恰恰起到了互補的作用。
一般涉及到安全問題的時候,這兩類加密算法都會結合在一起使用。
如下是一個用戶登錄服務器的一個過程:使用了3Des和RSA兩種算法。
//用戶信息3Des加密
NSString *userInfoDataWithEncode = [TXTSignEncrypt stringBy3DesEncoding:encodingContent withKey:(char *)[keyData bytes]];
NSData *userInfoData = [NSString stringToByte:userInfoDataWithEncode];
//通過對3DES key進行RSA加密
NSString *tripleKeyEncodeWithRSA = [TXTSignEncrypt stringByRsaEncodingWith:threeDeskey WithKey:K_API_KEY];
NSData *tripleKeyData = [NSString stringToByte:tripleKeyEncodeWithRSA];
//將兩者信息整合在一起
NSData *dataToServer = [SFCTLVForLogin PAIMTLVForLoginWithUserInfoData:userInfoData withEncryptKey:tripleKeyData];
//發送給后端服務器
loginRequest = [PAHTTPRequest sendRequestWithURL:url
bodyData:dataToServer
withTag:tag
httpType:HTTP_RSA
