iOS?常見加密方式:base-64,MD5,鑰匙串加密

<h2>一.base-64</h2>

base64 編碼是現代密碼學的基礎

基本原理:
原本是 8個bit 一組表示數據,改為 6個bit一組表示數據,不足的部分補零,每 兩個0 用 一個 = 表示
用base64 編碼之后,數據長度會變大,增加了大約 1/3 左右.(8-6)/6

特點:
1.可進行反向解密
2.Xcode7.0 之后出現的
3.編碼有個非常顯著的特點,末尾有個 = 號

<h5>對文件進行加密:</h5>

 // 獲取需要加密文件的二進制數據
 NSData *data = [NSData dataWithContentsOfFile:@"/Users/file/Desktop/photo/IMG.jpg"];
 // 或 base64EncodedStringWithOptions
 NSData *base64Data = [data base64EncodedDataWithOptions:0];
 // 將加密后的文件存儲到桌面
[base64Data writeToFile:@"/Users/file/Desktop/123" atomically:YES];

<h5>對文件進行解密:</h5>

// 獲得加密后的二進制數據
NSData *base64Data = [NSData dataWithContentsOfFile:@"/Users/file/Desktop/123"];
// 解密 base64 數據
NSData *baseData = [[NSData alloc] initWithBase64EncodedData:base64Data options:0];
// 寫入桌面
[baseData writeToFile:@"/Users/file/Desktop/IMG.jpg" atomically:YES];

<h2>二.MD5加密(信息-摘要算法) 哈希算法</h2>

1.把一個任意長度的字節串變換成一定長度的十六進制的大整數.
2.注意,字符串的轉換過程是不可逆的,不能通過加密結果,反向推導出原始內容

3.MD5特點:
壓縮性 : 任意長度的數據,算出的 MD5 值長度都是固定的.
容易計算 : 從原數據計算出 MD5 值很容易.
抗修改性 : 對原數據進行任何改動,哪怕只修改一個字節,所得到的 MD5 值都有很大區別.
弱抗碰撞 : 已知原數據和其 MD5 值,想找到一個具有相同 MD5 值的數據(即偽造數據)是非常困難的.
5.強抗碰撞: 想找到兩個不同數據,使他們具有相同的 MD5 值,是非常困難的

4.MD5 應用:
一致性驗證:MD5將整個文件當做一個大文本信息,通過不可逆的字符串變換算法,產生一個唯一的MD5信息摘要.就像每個人都有自己獨一無二的指紋,MD5對任何文件產生一個獨一無二的數字指紋.
利用 MD5 來進行文件校驗,被大量應用在軟件下載站,論壇數據庫,系統文件安全等方面(是否認為添加木馬,篡改文件內容等).百度‘MD5’第一個網站進去,利用數據庫偽解密,即反查詢.
數字簽名;
安全訪問認證;
<h5>使用方法</h5>
利用 MD5 對字符串進行加密

  NSString *password = @"xxx";
  password = [password md5String];
  NSLog(@"password1:%@", password);
  - 加鹽:可以保證 MD5加密之后更加安全
  NSString *salt = @"234567890-!@#$%^&*()_+QWERTYUIOP{ASDFGHJKL:XCVBNM<>";
  [password stringByAppendingString:salt];
  password = [password md5String];
  NSLog(@"password2:%@", password);

每一個公司都有自己的“鹽值”,鹽值越復雜,越安全

時間戳密碼

基本介紹

  • 動態密碼:相同的密碼明文+相同的加密算法-->因為每次登陸時間都不同,所以每次計算出的結果也都不相同.可以充分保證密碼的安全性.
  • 服務器會計算兩個時間值,當期時間和前一分鐘的時間(比如:第59S發送的網絡請求,一秒鐘后服務器收到并作出響應,這時服務器當前時間比客戶端發送時間晚一分鐘,仍然能夠判斷準確的值)

使用步驟

獲取MD5 首次加密的密碼

// 1. 當前密碼
NSString *password = @"xxx";
// 2. hmacKey值,是對“xxx” 進行 MD5加密之后的值(動態生成的)
NSString *hmacKey = @"d3bba33b51acaa0a272de7a2f6dfa233";

加密過程:

// 1. 第一次加密:第一次 HMAC 運算
password = [password hmacMD5StringWithKey:hmacKey];
// 2.1 獲得當前的時間
NSDate *date = [NSDate date];
// 2.2 獲得當前時間的字符串
// 實例化時間格式器
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
// 設置時間格式
formatter.dateFormat = @"yyyy-MM-dd HH:mm";
// 獲取當前時間(要和服務器保持一致)
NSString *dateStr = [formatter stringFromDate:date];
// 3. 將第一次加密后的密碼與當前時間的字符串拼接在一起
password = [password stringByAppendingString:dateStr];
// 4. 進行第二次 HMAC 加密
password = [password hmacMD5StringWithKey:hmacKey];

<h2>鑰匙串加密</h2>

基本介紹

蘋果在 iOS 7.0.3版本以后公布鑰匙串訪問的SDK.鑰匙串訪問接口是純C語言的.
鑰匙串使用 AES 256加密算法,能夠保證用戶密碼的安全.
鑰匙串訪問的第三方框架SSKeychain,是對C語言框架的封裝.注意:不需要看源碼.
鑰匙串訪問的密碼保存在哪里?只有蘋果才知道.這樣進一步保障了用戶的密碼安全.

參數介紹

Password :需要存儲的密碼信息.
Service :用來標識 app ,app的唯一標識符.
account :賬戶信息,當前密碼所對應的賬號.

利用鑰匙串進行加密

// 獲取應用程序唯一標識.
NSString *bundleId = [NSBundle mainBundle].bundleIdentifier;
// 利用第三方框架,將用戶密碼保存在鑰匙串
[SSKeychain setPassword:self.pwdText.text forService:bundleId account:@"wpf"];

從鑰匙串加載密碼

 self.pwdText.text = [SSKeychain passwordForService:bundleId account:@"wpf"];

AES/RSA

簡單介紹

AES加密也叫對稱加密:A用密碼對數據進行AES加密后,B用同樣的密碼對密文進行AES解密。
在服務器與終端設備進行HTTP通訊時,常常會被網絡抓包、反編譯(Android APK反編譯工具)等技術得到HTTP通訊接口地址和參數。為了確保信息的安全,我們采用AES+RSA組合的方式進行接口參數加密和解密。
關于RSA加密機制:公鑰用于對數據進行加密,私鑰對數據進行解密,兩者不可逆。公鑰和私鑰是同時生成的,一一對應。比如:A擁有公鑰,B擁有公鑰和私鑰。A將數據通過公鑰進行加密后,發送密文給B,B可以通過私鑰和公鑰進行解密。

對比:

AES: 對稱加密 秘鑰加密 秘鑰解密 效率高 不安全
RSA:非對稱加密 效率低 安全

1.A想要從B獲取數據 A生成公鑰和私鑰 公鑰與私鑰是唯一對應的 將其中一方傳給B 列如私鑰 B拿到私鑰對文件加密 生成密文 回傳給A.

2.A根據公鑰解密數據 第三方最多只能拿到密文和私鑰 無法解密.

3.發送大文件將對稱加密的秘鑰 采用非對稱加密 拿不到對稱加密的秘鑰就是安全的 即使用對稱加密原文 用非對稱加密加密對稱加密的秘鑰.
-64

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,401評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,011評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,263評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,543評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,323評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,874評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,968評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,095評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,605評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,551評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,720評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,242評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,961評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,358評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,612評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,330評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,690評論 2 370

推薦閱讀更多精彩內容