在專案中當我們提交使用者的隱私資料時,比如:登陸密碼、銀行賬號等,一定要使用post
請求提交使用者的這些隱私資料。因為get
請求的所有引數都直接暴露在url
中。同時請求的url
一般會記錄在伺服器的訪問日誌中,伺服器的訪問日誌是黑客攻擊的重點物件之一。
僅僅用post
請求提交使用者的隱私資料,還是不能完全解決資料安全的問題,我們可以利用軟體(比如charles)設定**伺服器,攔截檢視手機的請求資料。因此:提交使用者的隱私資料時,一定不要明文提交,要加密處理後再提交。
另外,我們也不應該在本地儲存使用者的隱私資料的明文
。
常見的加密演算法:md5 \ sha \ des \ 3des \ rc2和rc4 \ rsa \ idea \ dsa \ aes。
針對上述加密演算法,我把目前流行的幾種加密方式做下分類:
對稱加密演算法
非對稱加密演算法
重點說一下雜湊函式的特點:利用這些特點,我們在專案中的應用:
加密密碼
:伺服器並不需要知道使用者真實的密碼!
搜尋
:比如你要搜尋「張老師 楊老師 蒼老師」和「蒼老師 張老師 楊老師」,其實這兩個要搜尋的內容所表達的意思是一樣的,但是我們應該如何判斷呢。我們可以對搜尋的每個關鍵字進行雜湊,得到三個相對應的結果,按位相加結果如果是一樣的,那搜尋的內容就是一樣的!
張老師 1bdf605991920db11cbdf8508204c4eb
楊老師 2d97fbce49977313c2aae15ea77fec0f
蒼老師 692e92669c0ca340eff4fdcef32896ee
版權
: 版權保護,檔案識別。例如可以對檔案內容進行md5,然後可以根據該md5串判斷檔案內容是否被修改過。我以前做im的檔案上傳功能就是這樣判斷的,如果檔案內容的md5相同,表示該檔案已經在伺服器存在了,就不用再次上傳了。
由於md5
加密演算法具有較好的安全性,而且免費,因此該加密演算法被廣泛使用。不過遺憾的是該加密演算法已經被暴力破解了,該**記錄超過24萬億條,共占用160t硬碟 的密碼資料,通過對海量資料的搜尋得到的結果!
不過我們可以通過提公升md5加密的安全性,加大被破解的難度。
1
. 加「鹽」(佐料)。
2
. hmac:給定乙個」秘鑰」,對明文進行加密,並且做」兩次雜湊」!-> 得到的結果,還是 32 個字元。
rsa演算法中,每個通訊主體都有兩個鑰匙,乙個公鑰乙個私鑰。就是有2把鑰匙:使用publickey可以對資料進行加密,使用key才能對資料進行解密。
特點:單方向傳輸
用公鑰加密的資料,只有私鑰能解開(可用於加密);
同時,使用私鑰加密的資料,只有公鑰能解開(簽名)。但是速度很慢(比私鑰加密慢100到1000倍);
公鑰與私鑰:
1.權威數字認證機構(ca)給所有通訊主體(個人或組織)頒發公鑰和私鑰,彼此配對,分別唯一。
2.私鑰好比數字指紋,同時具有解密和加密功能。個人保管,不公開。
3.公鑰好比安全性極高的**信箱位址,公開。
舉例:若甲有乙份需保密的數字商業合同發給乙簽署。經過如下步驟:
甲用乙的公鑰對合同加密。
密文從甲傳送到乙。
乙收到密文,並用自己的私鑰對其解密。
解密正確,經閱讀,乙用自己的私鑰對合同進行簽署。
乙用甲的公鑰對已經簽署的合同進行加密。
乙將密文發給甲。
甲用自己的私鑰將已簽署合同解密。
解密正確,確認簽署。
從以上步驟,我們知道:
用公鑰加密的密文能且只能用與其唯一配對的私鑰才能解開。
如果某份密文被解開,那麼肯定是密文的目標資訊主體解開的。
私鑰因其唯一標識所有者的屬性,被用於數字簽名,具有法律效力。
1.base64簡單說明:
描述:base64可以成為密碼學的基石,非常重要。
特點:可以將任意的二進位制資料進行base64編碼
結果:所有的資料都能被編碼為並只用65個字元就能表示的文字檔案。
65字元:a~z a~z 0~9 + / =
對檔案進行base64編碼後檔案資料的變化:編碼後的資料~=編碼前資料的4/3,會大1/3左右。
2.命令列進行base64編碼和解碼:
編碼:base64 123.png -o 123.txt
解碼:base64 123.txt -o test.png -d
3.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.如果沒有剩下任何資料,就什麼都不要加,這樣才可以保證資料還原的正確性。
4.在專案中的應用:
1)從ios7.0 開始,蘋果就提供了base64的編碼和解碼支援
2)如果是老專案,則還能看到base64編碼和解碼的第三方框架,如果當前不再支援ios7.0以下版本,則建議替換。
**實現:
//給定乙個字串,對該字串進行base64編碼,然後返回編碼後的結果
-(nsstring *)base64encodestring:(nsstring *)string
//對base64編碼後的字串進行解碼
-(nsstring *)base64decodestring:(nsstring *)string
終端測試命令:
$ echo -n a | base64$ echo -n qq== |base64 -d
iOS安全 常用加密
主要介紹ios開發中常用的加密方式 把乙個任意長度的位元組串變換成一定長度的十六進製制的大整數.注意,字串的轉換過程是不可逆的,不能通過加密結果,反向推導出原始內容 基本介紹 md5 應用 使用方法 可進行反向解密 xcode7.0 之後出現的 編碼有個非常顯著的特點,末尾有個 號 將檔案進行加密 ...
安全加密之 PAM
我們在系統中經常要用到各種認證,login登入需要認證,ssh,telnet ftp等需要認證,snmp,smtp等也需要認證,總之既然大家都需要認證,那麼找個人統一管理下好不好。pam有個各個認證模組,關於資源限制的,關於使用者賬號的,關於登入時間的,各個模組,當你的服務需要認證時,你只要把你的需...
iOS開發 資料加密安全防護
開發中,客戶端開發,密碼加密!伺服器不知道使用者的密碼!所以現在沒有 找回密碼 的功能,只有重置密碼!從業務邏輯來講,非對稱加密要比對稱加密要相對安全,但是效率不高,不提倡大量資料的加密的使用,而僅僅對關鍵資料進行使用。import viewcontroller.h import nsstring ...