網(wǎng)絡(luò)安全

對(duì)稱加密

對(duì)稱加密采用了對(duì)稱密碼編碼技術(shù)见秤,它的特點(diǎn)是文件加密和解密使用相同的密鑰
,即加密密鑰也可以用作解密密鑰,這種方法在密碼學(xué)中叫做對(duì)稱加密算法匙铡,對(duì)稱加密算法使用起來(lái)簡(jiǎn)單快捷,密鑰較短碍粥,且破譯困難鳖眼,除了數(shù)據(jù)加密標(biāo)準(zhǔn)(DES),另一個(gè)對(duì)稱密鑰加密系統(tǒng)是國(guó)際數(shù)據(jù)加密算法(IDEA)嚼摩,它比DES的加密性好钦讳,而且對(duì)計(jì)算機(jī)功能要求也沒(méi)有那么高。IDEA加密標(biāo)準(zhǔn)由PGP(Pretty Good Privacy)系統(tǒng)使用枕面。
對(duì)稱加密算法在電子商務(wù)交易過(guò)程中存在幾個(gè)問(wèn)題:
1愿卒、要求提供一條安全的渠道使通訊雙方在首次通訊時(shí)協(xié)商一個(gè)共同的密鑰。直接的面對(duì)面協(xié)商可能是不現(xiàn)實(shí)而且難于實(shí)施的潮秘,所以雙方可能需要借助于郵件和電話等其它相對(duì)不夠安全的手段來(lái)進(jìn)行協(xié)商琼开;
2、密鑰的數(shù)目難于管理枕荞。因?yàn)閷?duì)于每一個(gè)合作者都需要使用不同的密鑰柜候,很難適應(yīng)開(kāi)放社會(huì)中大量的信息交流;
3躏精、對(duì)稱加密算法一般不能提供信息完整性的鑒別渣刷。它無(wú)法驗(yàn)證發(fā)送者和接受者的身份;
4玉控、對(duì)稱密鑰的管理和分發(fā)工作是一件具有潛在危險(xiǎn)的和煩瑣的過(guò)程飞主。對(duì)稱加密是基于共同保守秘密來(lái)實(shí)現(xiàn)的,采用對(duì)稱加密技術(shù)的貿(mào)易雙方必須保證采用的是相同的密鑰高诺,保證彼此密鑰的交換是安全可靠的碌识,同時(shí)還要設(shè)定防止密鑰泄密和更改密鑰的程序。
假設(shè)兩個(gè)用戶需要使用對(duì)稱加密方法加密然后交換數(shù)據(jù)虱而,則用戶最少需要2個(gè)密鑰并交換使用筏餐,如果企業(yè)內(nèi)用戶有n個(gè),則整個(gè)企業(yè)共需要n×(n-1) 個(gè)密鑰牡拇,密鑰的生成和分發(fā)將成為企業(yè)信息部門的惡夢(mèng)魁瞪。
常見(jiàn)的對(duì)稱加密算法有DES穆律、3DES、Blowfish导俘、IDEA峦耘、RC4、RC5旅薄、RC6和AES

非對(duì)稱加密

1976年辅髓,美國(guó)學(xué)者Dime和Henman為解決信息公開(kāi)傳送和密鑰管理問(wèn)題,提出一種新的密鑰交換協(xié)議少梁,允許在不安全的媒體上的通訊雙方交換信息洛口,安全地達(dá)成一致的密鑰,這就是“公開(kāi)密鑰系統(tǒng)”凯沪。相對(duì)于“對(duì)稱加密算法”這種方法也叫做“非對(duì)稱加密算法”第焰。
與對(duì)稱加密算法不同,非對(duì)稱加密算法需要兩個(gè)密鑰:公開(kāi)密鑰(publickey)和私有密鑰
(privatekey)妨马。公開(kāi)密鑰與私有密鑰是一對(duì)挺举,如果用公開(kāi)密鑰對(duì)數(shù)據(jù)進(jìn)行加密,只有用對(duì)應(yīng)的私有密鑰才能解密身笤;如果用私有密鑰對(duì)數(shù)據(jù)進(jìn)行加密豹悬,那么只有用對(duì)應(yīng)的公開(kāi)密鑰才能解密。因?yàn)榧用芎徒饷苁褂玫氖莾蓚€(gè)不同的密鑰液荸,所以這種算法叫作非對(duì)稱加密算法。
非對(duì)稱加密算法實(shí)現(xiàn)機(jī)密信息交換的基本過(guò)程是:甲方生成一對(duì)密鑰并將其中的一把作為公用密鑰向其它方公開(kāi)脱篙;得到該公用密鑰的乙方使用該密鑰對(duì)機(jī)密信息進(jìn)行加密后再發(fā)送給甲方娇钱;甲方再用自己保存的另一把專用密鑰對(duì)加密后的信息進(jìn)行解密。甲方只能用其專用密鑰解密由其公用密鑰加密后的任何信息绊困。
非對(duì)稱加密算法的保密性比較好文搂,它消除了最終用戶交換密鑰的需要,但加密和解密花費(fèi)時(shí)間長(zhǎng)秤朗、速度慢煤蹭,它不適合于對(duì)文件加密而只適用于對(duì)少量數(shù)據(jù)進(jìn)行加密。
如果企業(yè)中有n個(gè)用戶取视,企業(yè)需要生成n對(duì)密鑰硝皂,并分發(fā)n個(gè)公鑰。由于公鑰是可以公開(kāi)的作谭,用戶只要保管好自己的私鑰即可(企業(yè)分發(fā)后一般保存的是私鑰,用戶拿的是公鑰)稽物,因此加密密鑰的分發(fā)將變得十分簡(jiǎn)單。同時(shí)折欠,由于每個(gè)用戶的私鑰是唯一的贝或,其他用戶除了可以可以通過(guò)信息發(fā)送者的公鑰來(lái)驗(yàn)證信息的來(lái)源是否真實(shí)吼过,還可以確保發(fā)送者無(wú)法否認(rèn)曾發(fā)送過(guò)該信息。非對(duì)稱加密的缺點(diǎn)是加解密速度要遠(yuǎn)遠(yuǎn)慢于對(duì)稱加密咪奖,在某些極端情況下盗忱,甚至能比非對(duì)稱加密慢上1000倍。 非對(duì)稱加密的典型應(yīng)用是數(shù)字簽名羊赵。
常見(jiàn)的非對(duì)稱加密算法有:RSA售淡、ECC(移動(dòng)設(shè)備用)、Diffie-Hellman慷垮、El Gamal揖闸、DSA(數(shù)字簽名用)
Hash算法(摘要算法)
Hash算法特別的地方在于它是一種單向算法,用戶可以通過(guò)Hash算法對(duì)目標(biāo)信息生成一段特定長(zhǎng)度的唯一的Hash值料身,卻不能通過(guò)這個(gè)Hash值重新獲得目標(biāo)信息汤纸。因此Hash算法常用在不可還原的密碼存儲(chǔ)、信息完整性校驗(yàn)等芹血。
常見(jiàn)的Hash算法有MD2贮泞、MD4、MD5幔烛、HAVAL啃擦、SHA

加密算法的效能通常可以按照算法本身的復(fù)雜程度饿悬、密鑰長(zhǎng)度(密鑰越長(zhǎng)越安全)令蛉、加解密速度等來(lái)衡量。上述的算法中狡恬,除了DES密鑰長(zhǎng)度不夠珠叔、MD2速度較慢已逐漸被淘汰外,其他算法仍在目前的加密系統(tǒng)產(chǎn)品中使用弟劲。

總結(jié):
1: 哈希算法是一種摘要算法,主要作用是用來(lái)檢驗(yàn)是不是原文件.嚴(yán)格意義上來(lái)說(shuō)不屬于加密算法(因?yàn)闆](méi)有解密過(guò)程)
2: 獲取字符串的MD5比較簡(jiǎn)單,其他對(duì)象可以先轉(zhuǎn)化為NSData對(duì)象再進(jìn)行操作
3: 可以根據(jù)路徑直接獲取本地?cái)?shù)據(jù),也可以將對(duì)象寫(xiě)入文件后獲取為NSData對(duì)象
4: ios同樣支持SHA1, base64, AES, 鑰匙串, 等方式加密數(shù)據(jù).

下面我們通過(guò)代碼來(lái)看看iOS中對(duì)MD5的具體使用

首先,在新鍵的工程中,打開(kāi)控制器的.m文件
然后進(jìn)行引入MD5的框架

 // #import <CommonCrypto/CommonCrypto.h>

pragma mark - 字符串加密

// 1.準(zhǔn)備加密的字符串
NSString *string = @"hello word"; `
// 因?yàn)镸D5是用c寫(xiě)的和數(shù)據(jù)庫(kù)sqlite一樣,所以要編碼
const char *fooData = string.utf8String;`
// 3: 創(chuàng)建一個(gè)字符串?dāng)?shù)組,接收MD5的值
unsigned char result[CC_MD5_DIGEST_LENGTH];
//4: 計(jì)算MD5的值 
//參數(shù) 1: 表示要加密的字符串
//參數(shù) 2: 獲取要加密字符串的長(zhǎng)度
//參數(shù) 3: 接收結(jié)果的數(shù)組

CC_MD5(fooData, (CC_LONG)strlen(fooData), result); 
NSMutableString *resultString = [NSMutableString string];
for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
[resultString appendFormat:@"%02X",result[i]];  }
NSLog(@"resultString --> %@",resultString);

pragma mark - 其他對(duì)象加密(先轉(zhuǎn)化成NSData)

// NSArray *array = @[@"1",@"2"]; 
 NSString *documentsPathStr = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]; 
NSString *path = [documentsPathStr stringByAppendingPathComponent:@"array.plist"];
[array writeToFile:path atomically:YES];
NSData *data = [NSData dataWithContentsOfFile:path];
`
// 1. 創(chuàng)建MD5對(duì)象
`CC_MD5_CTX md5;`
// 2. 初始化MD5對(duì)象
`CC_MD5_init(&md5);`
// 3. 準(zhǔn)備MD5的加密
`CC_MD5_Update(&md5, data.bytes, (CC_LONG)data.length);`
// 4. 準(zhǔn)備一個(gè)字符串?dāng)?shù)組,存儲(chǔ)MD5加密之后的數(shù)據(jù)
`unsigned char result[CC_MD5_DIGEST_LENGTH];`
// 5. 結(jié)束MD5的加密
`CC_MD5_Final(result, &md5);
NSMutableString *resultString = [NSMutableString string];    for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) 
{ [resultString appendFormat:@"%02X",result[i]];
}    NSLog(@"%@", resultString);
}`

鑰匙串加密
鑰匙串(Keychain):是蘋(píng)果公司Mac OS中的密碼管理系統(tǒng).一個(gè)鑰匙串可以包含多種類型的數(shù)據(jù): 密碼(包含網(wǎng)站,FTP服務(wù)器,SSH賬戶, 無(wú)線網(wǎng)絡(luò), 群組軟件, 加密磁盤(pán)鏡像等), 私鑰,電子證書(shū)和加密筆記.

蘋(píng)果iOS和Mac OS X系統(tǒng)自帶了一套敏感信息保存方案: “鑰匙串(Keychain)"

鑰匙串中的條目成為Secltem, 但它是存儲(chǔ)在CFDictionary中的. SecltemRef類型并不存在.Secltem有五類: 通用密碼, 互聯(lián)網(wǎng)密碼, 證書(shū), 密鑰和身份. 在大多數(shù)情況下, 我們用得到的都是通用密碼

鑰匙串的使用和字典非常的相似

用原生的Security.framework 就可以實(shí)現(xiàn)鑰匙串的訪問(wèn),讀寫(xiě). 但是只能在真機(jī)上進(jìn)行. 通常我們使用KeychainItemWrapper來(lái)完成鑰匙串的加密.

不同頁(yè)面使用相同的 唯一標(biāo)識(shí)符 也能解析到 數(shù)據(jù)

過(guò)程:
1祷安、拷貝鑰匙串類到工程(引入并且在Build Phases-Compile Soirces 中給KeychainItemWrapper改成arc和mrc混編即添加-info-objc-arc)
2、引入頭文件
3兔乞、生成鑰匙串對(duì)象
4汇鞭、存儲(chǔ)加密的數(shù)據(jù)
5、獲取鑰匙串對(duì)象
6庸追、獲取加密的數(shù)據(jù)

// 1.創(chuàng)建鑰匙對(duì)象
//參數(shù)1:表示這個(gè)鑰匙串對(duì)象的標(biāo)識(shí)符
//參數(shù)2:分組一般為nil
`KeychainItemWrapper*wrapper = [[KeychainItemWrapperalloc]initWithIdentifier:@"MyItemWrapper"accessGroup:nil];`
//鑰匙串是類似于字典存儲(chǔ)的,在存儲(chǔ)的時(shí)候必須使用系統(tǒng)的兩個(gè)key值,其他的存不進(jìn)去
`idkUserName = (__bridgeid)kSecAttrAccount;
idkPassWord = (__bridgeid)kSecValueData;`

//存入到鑰匙串里面
`[wrappersetObject:@"123"forKey:kUserName]
[wrappersetObject:@"abc"forKey:kPassWord];`
//這里已經(jīng)保存完成了
#pragma mark獲取鑰匙串的數(shù)據(jù)
`KeychainItemWrapper*newWrapper = [[KeychainItemWrapperalloc]initWithIdentifier:@"MyItemWrapper"accessGroup:nil]; 
NSString*userName = [newWrapperobjectForKey:kUserName];
NSString*passWord = [newWrapperobjectForKey:kPassWord]; 
NSLog(@"%@ %@",userName,passWord);`

RSA公鑰加密
//公鑰和私鑰都是使用證書(shū)生成的, 并非我們自定義字符串就可以.我們使用的是生成好的公鑰和私鑰
//其中-----BEGIN PUBLIC KEY----- 開(kāi)頭結(jié)尾之類不屬于密鑰部分
//公鑰,用于加密數(shù)據(jù). 用于公開(kāi), 一般存放在數(shù)據(jù)提供方, 例如iOS客戶端.
NSString *pubkey = @"公鑰";
/私鑰,用于解密數(shù)據(jù). 必須保密, 私鑰泄露會(huì)造成安全問(wèn)題.
NSString *privkey = @"私鑰";
NSString *string = @"James"; 
NSString *encPubKey;//公鑰加密結(jié)果
NSString *decPriKey;//私鑰解密結(jié)果
//使用RSA加密(RSA加密之后得到的結(jié)果每一次都不一樣,但都可以通過(guò)同一個(gè)私鑰進(jìn)行解密)
//參數(shù) 1: 要加密的數(shù)據(jù)
//參數(shù) 2: 公鑰
`encPubKey = [RSA encryptString:string publicKey:pubkey];
NSLog(@"encPubKey --> %@",encPubKey);
decPriKey = [RSA decryptString:encPubKey privateKey:privkey]; 
NSLog(@"decPriKey --> %@",decPriKey);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末霍骄,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子锚国,更是在濱河造成了極大的恐慌腕巡,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件血筑,死亡現(xiàn)場(chǎng)離奇詭異绘沉,居然都是意外死亡煎楣,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門车伞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)择懂,“玉大人,你說(shuō)我怎么就攤上這事另玖±铮” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵谦去,是天一觀的道長(zhǎng)慷丽。 經(jīng)常有香客問(wèn)我,道長(zhǎng)鳄哭,這世上最難降的妖魔是什么要糊? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮妆丘,結(jié)果婚禮上锄俄,老公的妹妹穿的比我還像新娘。我一直安慰自己勺拣,他們只是感情好奶赠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著药有,像睡著了一般毅戈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上塑猖,一...
    開(kāi)封第一講書(shū)人閱讀 51,604評(píng)論 1 305
  • 那天竹祷,我揣著相機(jī)與錄音,去河邊找鬼羊苟。 笑死,一個(gè)胖子當(dāng)著我的面吹牛感憾,可吹牛的內(nèi)容都是我干的蜡励。 我是一名探鬼主播,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼阻桅,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼凉倚!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起嫂沉,我...
    開(kāi)封第一講書(shū)人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤稽寒,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后趟章,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體杏糙,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡慎王,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宏侍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赖淤。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖谅河,靈堂內(nèi)的尸體忽然破棺而出咱旱,到底是詐尸還是另有隱情,我是刑警寧澤绷耍,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布吐限,位于F島的核電站,受9級(jí)特大地震影響褂始,放射性物質(zhì)發(fā)生泄漏诸典。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一病袄、第九天 我趴在偏房一處隱蔽的房頂上張望搂赋。 院中可真熱鬧,春花似錦益缠、人聲如沸脑奠。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)宋欺。三九已至,卻和暖如春胰伍,著一層夾襖步出監(jiān)牢的瞬間齿诞,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工骂租, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留祷杈,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓渗饮,卻偏偏與公主長(zhǎng)得像但汞,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子互站,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

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