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

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

base64 編碼是現(xiàn)代密碼學(xué)的基礎(chǔ)

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

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

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

 // 獲取需要加密文件的二進制數(shù)據(jù)
 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>

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

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

1.把一個任意長度的字節(jié)串變換成一定長度的十六進制的大整數(shù).
2.注意,字符串的轉(zhuǎn)換過程是不可逆的,不能通過加密結(jié)果,反向推導(dǎo)出原始內(nèi)容

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

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

每一個公司都有自己的“鹽值”曙咽,鹽值越復(fù)雜,越安全

時間戳密碼

基本介紹

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

使用步驟

獲取MD5 首次加密的密碼

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

加密過程:

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

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

基本介紹

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

參數(shù)介紹

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

利用鑰匙串進行加密

// 獲取應(yīng)用程序唯一標識.
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用密碼對數(shù)據(jù)進行AES加密后,B用同樣的密碼對密文進行AES解密鱼蝉。
在服務(wù)器與終端設(shè)備進行HTTP通訊時洒嗤,常常會被網(wǎng)絡(luò)抓包、反編譯(Android APK反編譯工具)等技術(shù)得到HTTP通訊接口地址和參數(shù)魁亦。為了確保信息的安全渔隶,我們采用AES+RSA組合的方式進行接口參數(shù)加密和解密。
關(guān)于RSA加密機制:公鑰用于對數(shù)據(jù)進行加密洁奈,私鑰對數(shù)據(jù)進行解密间唉,兩者不可逆。公鑰和私鑰是同時生成的利术,一一對應(yīng)呈野。比如:A擁有公鑰,B擁有公鑰和私鑰印叁。A將數(shù)據(jù)通過公鑰進行加密后际跪,發(fā)送密文給B,B可以通過私鑰和公鑰進行解密喉钢。

對比:

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

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

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市良姆,隨后出現(xiàn)的幾起案子肠虽,更是在濱河造成了極大的恐慌,老刑警劉巖玛追,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件税课,死亡現(xiàn)場離奇詭異闲延,居然都是意外死亡,警方通過查閱死者的電腦和手機韩玩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門垒玲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人找颓,你說我怎么就攤上這事合愈。” “怎么了击狮?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵佛析,是天一觀的道長。 經(jīng)常有香客問我彪蓬,道長寸莫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任档冬,我火速辦了婚禮膘茎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘酷誓。我一直安慰自己披坏,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布呛牲。 她就那樣靜靜地躺著刮萌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪娘扩。 梳的紋絲不亂的頭發(fā)上着茸,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天,我揣著相機與錄音琐旁,去河邊找鬼涮阔。 笑死,一個胖子當(dāng)著我的面吹牛灰殴,可吹牛的內(nèi)容都是我干的敬特。 我是一名探鬼主播,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼牺陶,長吁一口氣:“原來是場噩夢啊……” “哼伟阔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起掰伸,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤皱炉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后狮鸭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體合搅,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡多搀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了灾部。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片康铭。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖赌髓,靈堂內(nèi)的尸體忽然破棺而出从藤,到底是詐尸還是另有隱情,我是刑警寧澤春弥,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布呛哟,位于F島的核電站,受9級特大地震影響匿沛,放射性物質(zhì)發(fā)生泄漏扫责。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一逃呼、第九天 我趴在偏房一處隱蔽的房頂上張望鳖孤。 院中可真熱鬧,春花似錦抡笼、人聲如沸苏揣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽平匈。三九已至,卻和暖如春藏古,著一層夾襖步出監(jiān)牢的瞬間增炭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工拧晕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留隙姿,地道東北人。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓厂捞,卻偏偏與公主長得像输玷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子靡馁,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,654評論 2 354

推薦閱讀更多精彩內(nèi)容