非對稱加密算法需要兩個(gè)密鑰:公開密鑰(publickey)和私有密鑰(privatekey)
● 公開密鑰與私有密鑰是一對古戴,
如果用公開密鑰對數(shù)據(jù)進(jìn)行加密搁廓,只有用對應(yīng)的私有密鑰才能解密遍烦;
如果用私有密鑰對數(shù)據(jù)進(jìn)行加密税朴,那么只有用對應(yīng)的公開密鑰才能解密
● 特點(diǎn):
■ 非對稱密碼體制的特點(diǎn):算法強(qiáng)度復(fù)雜耀态、安全性依賴于算法與密鑰但是由于其算法復(fù)雜涨缚,而使得加密解密速度沒有對稱加密解密的速度快
■ 對稱密碼體制中只有一種密鑰轧粟,并且是非公開的,如果要解密就得讓對方知道密鑰脓魏。所以保證其安全性就是保證密鑰的安全兰吟,而非對稱密鑰體制有兩種密鑰,其中一個(gè)是公開的茂翔,這樣就可以不需要像對稱密碼那樣傳輸對方的密鑰了
- RSA算法原理
找出兩個(gè)“很大”的質(zhì)數(shù):P & Q
(2) N = P * Q (3) M = (P – 1) * (Q – 1) (4) 找出整數(shù)E混蔼,E與M互質(zhì),即除了1之外拄丰,沒有其他公約數(shù) (5) 找出整數(shù)D府树,使得E*D除以M余1料按,即 (E * D) % M = 1 ● 經(jīng)過上述準(zhǔn)備工作之后,可以得到: ■ E是公鑰载矿,負(fù)責(zé)加密 ■ D是私鑰垄潮,負(fù)責(zé)解密 ■ N負(fù)責(zé)公鑰和私鑰之間的聯(lián)系 ■ 加密算法,假定對X進(jìn)行加密 ? (X ^ E) % N = Y ■ 根據(jù)費(fèi)爾馬小定義闷盔,根據(jù)以下公式可以完成解密操作 ? (Y ^ D) % N = X
- RSA算法的實(shí)際應(yīng)用
由于RSA算法的加密解密速度要比對稱算法的速度慢很多,在實(shí)際應(yīng)用中逢勾,通常采取:
● (1) 數(shù)據(jù)本身的加密解密使用對稱加密算法(AES/DES3)
(2) 用RSA算法加密并傳輸對稱算法所需的秘鑰
(3) ● 除此之外溺拱,RSA算法還在身份認(rèn)證(或稱鑒權(quán))以及數(shù)字簽名方面得到廣泛的使用
//1.加載公鑰
[[RSACryptor sharedRSACryptor] loadPublicKey:[[NSBundle mainBundle] pathForResource:@"rsacert.der" ofType:nil]];
//2.加載私鑰
[[RSACryptor sharedRSACryptor] loadPrivateKey:[[NSBundle mainBundle] pathForResource:@"p.p12" ofType:nil] password:@"123456"];
//加密
NSData *data = [[RSACryptor sharedRSACryptor] encryptData:[pwdStr dataUsingEncoding:NSUTF8StringEncoding]];
//base64
NSLog(@"%@",[data base64EncodedStringWithOptions:0]);
NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
// [data writeToFile:@"/Users/xiaomage/Desktop/aaaa" atomically:YES];
//解密
NSData *dataM = [[RSACryptor sharedRSACryptor] decryptData:data];
NSLog(@"非對稱加密__解密 = %@",[[NSString alloc]initWithData:dataM encoding:NSUTF8StringEncoding]);
效果