加密

1、Hash(哈希)

指的的散列函數(shù),將任意長(zhǎng)度的數(shù)據(jù)經(jīng)過特殊的散列算法變換位固定長(zhǎng)度的輸出,這是一種壓縮映射。不可逆。
常用的散列方法,刀哥已經(jīng)幫我們封裝好了(NSSting+Hash),可以直接來使用:

MD5(Message Digest Algorithm):將一個(gè)數(shù)據(jù)轉(zhuǎn)換為32個(gè)字符的字符串:

NSString *md5String = @"123".md5String;
NSString *fileMd5String = [@"aPath" fileMD5Hash];

sha1(Secure Hash Algorithm):將一個(gè)數(shù)據(jù)轉(zhuǎn)換為40個(gè)字節(jié)的字符串:

NSString *sha1String = @"123".sha1String;
NSString *fileSha1String = [@"aPath" fileMD5Hash];

sha256(Secure Hash Algorithm):將一個(gè)數(shù)據(jù)轉(zhuǎn)換為64個(gè)字符的字符串:

NSString *sha256 = @"123".sha256String;
NSString *fileSha256String = [@"aPath" fileMD5Hash];

sha512(Secure Hash Algorithm):將一個(gè)數(shù)據(jù)轉(zhuǎn)換為128個(gè)字符的字符串。

 NSString *sha512 = @"123".sha512String;
 NSString *fileSha512String = [@"aPath" fileMD5Hash];

HMAC(Hash-based Message Authentication Code):
利用哈希算法,以一個(gè)密鑰和一個(gè)消息,生成一個(gè)消息摘要。不可逆。

NSString *hmacMd5String = [@"123" hmacMD5StringWithKey:@"aKey"];
NSString *hmacSha1String = [@"123" hmacSHA1StringWithKey:@"aKey"];
NSString *hmacSha256String = [@"123" hmacSHA256StringWithKey:@"aKey"];
NSString *hmacSha512String = [@"123" hmacSHA512StringWithKey:@"aKey"];

注:散列算法單獨(dú)使用的安全系數(shù)很低,一般要“加鹽”(字符串散列后拼接鹽字符串后再進(jìn)行散列),而HMAC是一種使用較多的混合方式。如果覺得還不夠安全的話,可以采用時(shí)間戳。

時(shí)間戳:
以當(dāng)前時(shí)間的字符串為“鹽”或者密鑰生成的復(fù)合字符串,可進(jìn)一步保證安全性。時(shí)間一般精確到分鐘,為保證本機(jī)和服務(wù)器時(shí)間的同步,本機(jī)加密所用的時(shí)間需要從服務(wù)器獲取。

2、 對(duì)稱加密:

傳統(tǒng)加密算法,采用特殊的算法加密數(shù)據(jù),使得加密和解密使用同一個(gè)密鑰??赡妗R韵聻橹乃惴ǎ?/p>

DES(Data Encryption Standard):
數(shù)據(jù)加密標(biāo)準(zhǔn),是一種使用密鑰加密的塊算法。

3DES (同上):
使用3個(gè)密鑰,對(duì)相同數(shù)據(jù)執(zhí)行3次加密,強(qiáng)度增強(qiáng)。

AES(Advanced Encryption Standard):
高級(jí)加密標(biāo)準(zhǔn),美國(guó)聯(lián)邦政府采用的加密標(biāo)準(zhǔn),用于替代DES,對(duì)稱加密中最流行的算法之一。蘋果的鑰匙串采用這種加密方式。

ECB (Electronic CodeBook):
電子代碼本,采用對(duì)稱加密算法,將數(shù)據(jù)分為一個(gè)個(gè)單獨(dú)的塊,分別加密,特點(diǎn)是可并行處理、簡(jiǎn)單易用、誤差小,缺點(diǎn)是容易被統(tǒng)計(jì)破解(重復(fù)統(tǒng)計(jì))。

CBC(Code Block Chain):
密碼塊鏈,使用一個(gè)密鑰,和初始向量對(duì)數(shù)據(jù)進(jìn)行加密,前后數(shù)據(jù)之間有依賴關(guān)系,不會(huì)被統(tǒng)計(jì)破解。

鑰匙串的使用:
已經(jīng)有第三方框架封裝了鑰匙串的使用(SSKeychain),導(dǎo)入頭文件后:

// 存儲(chǔ)密碼到鑰匙串(需要指定 bundleId 以及 賬戶名,以方便后續(xù)訪問)
NSString *bundleId = [NSBundle mainBundle].bundleIdentifier
[SSKeychain setPassword:self.pwd forService:bundleId account:self.user];

// 根據(jù)用戶名取鑰匙串密碼 
NSString *bundleId = [NSBundle mainBundle].bundleIdentifier;
NSString *pwd = [SSKeychain passwordForService:bundleId account:userName];

3、非對(duì)稱加密:

非對(duì)稱加密使用公鑰、私鑰兩個(gè)鑰匙,公鑰加密,私鑰解密,或者私鑰加密,公鑰解密。算法較為復(fù)雜。非對(duì)稱加密算法由于計(jì)算量很大,目前普遍采用的方案是:數(shù)據(jù)本身采用AES加密,采用RSA加密 AES 的密鑰。

RSA算法:
這個(gè)算法以麻省理工大學(xué)的三位創(chuàng)始者命名,是目前最有影響力的公鑰加密算法,蘋果也推薦公鑰采用這種算法。

數(shù)字簽名:
報(bào)文經(jīng)過散列加密得到報(bào)文摘要,報(bào)文摘要經(jīng)過公鑰加密同報(bào)文一起發(fā)送。
接收到的經(jīng)公鑰加密過的報(bào)文摘要再經(jīng)過私鑰解密成原來的摘要,同 報(bào)文hash過的摘要進(jìn)行比對(duì),可確定報(bào)文有沒修改。

PKCS:(Public-Key Cryptography Standards):
公鑰密碼學(xué)標(biāo)準(zhǔn),包括了一系’的證書申請(qǐng)、更新、擴(kuò)展、作廢以及簽名格式、信封等的協(xié)議及規(guī)定。
PKCS#1:定義RSA公開算法及簽名機(jī)制,主要用于組織PKCS#7中描述的數(shù)字簽名和數(shù)字信封。
PKCS#8:描述私鑰信息格式,該信息包括公開密鑰算法的私鑰以及可選的屬性集(JAVA使用)
PKCS#12:描述個(gè)人信息交換語法標(biāo)準(zhǔn)(將用戶公鑰、私鑰、證書和其他相關(guān)信息打包的語法,蘋果使用)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容