你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS開發-數據安全之加密

iOS開發-數據安全之加密

編輯:IOS開發綜合

在黑客日益猖獗的今天,作為程序員,大家多多少少都要有一些數據安全方面的意識。尤其是發起網絡請求時,請求的URL一般都會記錄在公司服務器的訪問日志中,服務器的訪問日志就是是黑客攻擊的重點對象之一。因此,後台開發的小伙伴都在接口文檔中要求我們使用POST請求提交用戶的隱私數據,然而僅僅用POST請求提交用戶的隱私數據,還是不能完全解決安全問題,別人完全可以利用軟件(比如Charles)設置代理服務器,攔截查看手機的請求數據,輕松獲取用戶數據。在日常的開發中一定要遵循兩個原則:

在網絡上”不允許”傳輸用戶隱私數據的”明文” 在本地”不允許”保存用戶隱私數據的”明文”

因此,我們在提交用戶的隱私數據時,一定要進行加密處理。最近我總結了一下iOS中開發常用的加密算法。

常見的加密算法有MD5 \ SHA \ DES \ 3DES \ RC2和RC4 \ RSA \ IDEA \ DSA \ AES等等。

base64編碼

在學習加密算法之前,我們先來了解一下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鏈接。

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved