1、簡(jiǎn)介
1.1非對(duì)稱加密是計(jì)算機(jī)通信安全的基石策彤,保證了加密數(shù)據(jù)不會(huì)被破解。
1.2非對(duì)稱加密算法需要兩個(gè)密鑰:公開密鑰(publickey) 和私有密(privatekey)
1.3公開密鑰和私有密鑰是一對(duì)
如果用公開密鑰對(duì)數(shù)據(jù)進(jìn)行加密铐料,只有用對(duì)應(yīng)的私有密鑰才能解密定铜。
如果用私有密鑰對(duì)數(shù)據(jù)進(jìn)行加密,只有用對(duì)應(yīng)的公開密鑰才能解密繁疤。
2咖为、特點(diǎn)
算法強(qiáng)度復(fù)雜,安全性依賴于算法與密鑰稠腊。
加密解密速度慢躁染。
3、與對(duì)稱加密算法的對(duì)比
對(duì)稱加密只有一種密鑰架忌,并且是非公開的吞彤,如果要解密就得讓對(duì)方知道密鑰。
非對(duì)稱加密有兩種密鑰叹放,其中一個(gè)是公開的备畦。
4、經(jīng)典非對(duì)稱加密算法:RSA算法
1977年许昨,三位數(shù)學(xué)家Rivest懂盐、Shamir
和 Adleman 設(shè)計(jì)了一種算法,可以實(shí)現(xiàn)非對(duì)稱加密糕档。這種算法用他們?nèi)齻€(gè)人的名字命名莉恼,叫做RSA算法。
2速那、原理
1俐银、找出兩個(gè)‘很大’的質(zhì)數(shù):P & Q,一般長(zhǎng)度是上百位。然后通過下面計(jì)算得到 N和 M;
N = P * Q
M = (P - 1) * (Q - 1)
2端仰、找出整數(shù)E捶惜,E與M互質(zhì),即除了1之外荔烧,沒有其他公約數(shù)
3吱七、找出整數(shù)D,使用ED除以M余1鹤竭,即(ED) % M = 1
4踊餐、經(jīng)過上述準(zhǔn)備工作之后,可以得到:
E是公鑰臀稚,負(fù)責(zé)加密
D是私鑰,吝岭,負(fù)責(zé)解密
N負(fù)責(zé)公鑰和私鑰之間的聯(lián)系
5、加密算法,假定對(duì)X進(jìn)行加密
(X^E)%N = Y
6窜管、解密算法散劫,根據(jù)‘費(fèi)馬小定理',可以使用以下公式完成解密
(Y^D)%N = X
3幕帆、RSA算法演練
1获搏、RSA原理代碼演示
2、RSA算法演練
- (void)RSADemo{
CryptorTools *tools = [[CryptorTools alloc] init];
// 加載公鑰
NSString *pubPath = [[NSBundle mainBundle] pathForResource:@"rsacert.der" ofType:nil];
[tools loadPublicKeyWithFilePath:pubPath];
// 使用公鑰加密
NSString *result = [tools RSAEncryptString:@"i love you"];
NSLog(@"%@",result);
// 加載私鑰
NSString *privatePath = [[NSBundle mainBundle] pathForResource:@"p.p12" ofType:nil];
[tools loadPrivateKey:privatePath password:@"123"];
// 使用私鑰解密
NSLog(@"%@",[tools
RSADecryptString:result]);
}
4蜓肆、RSA應(yīng)用場(chǎng)景
由于 RSA算法的加密解密速度要比對(duì)稱算法速度慢很多,在實(shí)際應(yīng)用中谋币,通常采取
數(shù)據(jù)本身的加密和解密使用對(duì)稱加密算法(AES)仗扬。
用RSA算法加密并傳輸對(duì)稱算法所需的密鑰。