在黑客日益猖獗的今天,作為程序員,大家多多少少都要有一些數據安全方面的意識。尤其是發起網絡請求時,請求的URL一般都會記錄在公司服務器的訪問日志中,服務器的訪問日志就是是黑客攻擊的重點對象之一。因此,後台開發的小伙伴都在接口文檔中要求我們使用POST請求提交用戶的隱私數據,然而僅僅用POST請求提交用戶的隱私數據,還是不能完全解決安全問題,別人完全可以利用軟件(比如Charles)設置代理服務器,攔截查看手機的請求數據,輕松獲取用戶數據。在日常的開發中一定要遵循兩個原則:
在網絡上”不允許”傳輸用戶隱私數據的”明文” 在本地”不允許”保存用戶隱私數據的”明文”因此,我們在提交用戶的隱私數據時,一定要進行加密處理。最近我總結了一下iOS中開發常用的加密算法。
常見的加密算法有MD5 \ SHA \ DES \ 3DES \ RC2和RC4 \ RSA \ IDEA \ DSA \ AES等等。
在學習加密算法之前,我們先來了解一下base64編碼
Base64簡單說明
描述:Base64可以成為密碼學的基石,非常重要。
特點:可以將任意的二進制數據進行Base64編碼
結果:所有的數據都能被編碼為並只用65個字符就能表示的文本文件。
65字符:A~Z a~z 0~9 + / =
對文件進行base64編碼後文件數據的變化:編碼後的數據~=編碼前數據的4/3,會大1/3左右。
在mac環境下可以使用命令行進行Base64編碼和解碼
編碼:
base64 1.png -o 1.txt
解碼
base64 1.txt -o test.png -D
Base64編碼原理
1)將所有字符轉化為ASCII碼;
2)將ASCII碼轉化為8位二進制;
3)將二進制3個歸成一組(不足3個在後邊補0)共24位,再拆分成4組,每組6位;
4)統一在6位二進制前補兩個0湊足8位;
5)將補0後的二進制轉為十進制;
6)從Base64編碼表獲取十進制對應的Base64編碼;
處理過程說明:
a.轉換的時候,將三個byte的數據,先後放入一個24bit的緩沖區中,先來的byte占高位。
b.數據不足3byte的話,於緩沖區中剩下的bit用0補足。然後,每次取出6個bit,按照其值選擇查表選擇對應的字符作為編碼後的輸出。
c.不斷進行,直到全部輸入數據轉換完成。
d.如果最後剩下兩個輸入數據,在編碼結果後加1個“=”;
e.如果最後剩下一個輸入數據,編碼結果後加2個“=”;
f.如果沒有剩下任何數據,就什麼都不要加,這樣才可以保證資料還原的正確性。
代碼實現
1.說明:
1)從iOS7.0 開始,蘋果就提供了base64的編碼和解碼支持
2)如果是老項目,則還能看到base64編碼和解碼的第三方框架,如果當前不再支持iOS7.0以下版本,則建議替換。
2.相關代碼:
//給定一個字符串,對該字符串進行Base64編碼,然後返回編碼後的結果 -(NSString *)base64EncodeString:(NSString *)string { //1.先把字符串轉換為二進制數據 NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding]; //2.對二進制數據進行base64編碼,返回編碼後的字符串 return [data base64EncodedStringWithOptions:0]; } //對base64編碼後的字符串進行解碼 -(NSString *)base64DecodeString:(NSString *)string { //1.將base64編碼後的字符串『解碼』為二進制數據 NSData *data = [[NSData alloc]initWithBase64EncodedString:string options:0]; //2.把二進制數據轉換為字符串返回 return [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; }
效果圖
3.終端測試命令
echo -n WD |base64 echo -n V0Q= |base64 -D
哈希(散列)函數
MD5 SHA1 SHA256對稱加密算法
DES 3DES AES(高級密碼標准,美國國家安全局使用的)非對稱加密算法(RSA)
特點:
算法是公開的 “對相同的數據加密,得到的結果是一樣的” - 對不同的數據加密,得到的結果是定長的,MD5對不同的數據進行加密,得到的結果都是 32 個字符長度的字符串 信息摘要,信息”指紋”,是用來做數據識別的! 不能反算用途:
密碼,服務器並不需要知道用戶真實的密碼!
搜索
張同學 楊同學 蒼同學
蒼同學 張同學 楊同學
張同學 1bdf605991920db11cbdf8508204c4eb
楊同學 2d97fbce49977313c2aae15ea77fec0f
蒼同學 692e92669c0ca340eff4fdcef32896ee
如何判斷:對搜索的每個關鍵字進行三列,得到三個相對應的結果,按位相加結果如果是一樣的,那搜索的內容就是一樣的!
版權
版權保護,文件的識別。
破解:
- http://www.cmd5.com 記錄超過24萬億條,共占用160T硬盤 的密碼數據,通過對海量數據的搜索得到的結果!
MD5
什麼是MD5
全稱是Message Digest Algorithm 5,譯為“消息摘要算法第5版”
效果:對輸入信息生成唯一的128位散列值(32個字符)
MD5的特點
輸入兩個不同的明文不會得到相同的輸出值
根據輸出值,不能得到原始的明文,即其過程不可逆
MD5的應用
由於MD5加密算法具有較好的安全性,而且免費,因此該加密算法被廣泛使用
主要運用在數字簽名、文件完整性驗證以及口令加密等方面
MD5解密網站:http://www.cmd5.com
現在的MD5已不再是絕對安全,對此,可以對MD5稍作改進,以增加解密的難度
加鹽(Salt):在明文的固定位置插入隨機串,然後再進行MD5
先加密,後亂序:先對明文進行MD5,然後對加密得到的MD5串的字符進行亂序
… …
總之宗旨就是:黑客就算攻破了數據庫,也無法解密出正確的明文
實現
加密分類:
效果
照例相關的Demo會傳到我的Github上,有興趣的小伙伴可以去看下:Demo鏈接。