非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)
● 公开密钥与私有密钥是一对,
如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;
如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密
● 特点:
■ 非对称密码体制的特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快
■ 对称密码体制中只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥。所以保证其安全性就是保证密钥的安全,而非对称密钥体制有两种密钥,其中一个是公开的,这样就可以不需要像对称密码那样传输对方的密钥了
- RSA算法原理
找出两个“很大”的质数:P & Q
(2) N = P * Q (3) M = (P – 1) * (Q – 1) (4) 找出整数E,E与M互质,即除了1之外,没有其他公约数 (5) 找出整数D,使得E*D除以M余1,即 (E * D) % M = 1 ● 经过上述准备工作之后,可以得到: ■ E是公钥,负责加密 ■ D是私钥,负责解密 ■ N负责公钥和私钥之间的联系 ■ 加密算法,假定对X进行加密 ➢ (X ^ E) % N = Y ■ 根据费尔马小定义,根据以下公式可以完成解密操作 ➢ (Y ^ D) % N = X
- RSA算法的实际应用
由于RSA算法的加密解密速度要比对称算法的速度慢很多,在实际应用中,通常采取:
● (1) 数据本身的加密解密使用对称加密算法(AES/DES3)
(2) 用RSA算法加密并传输对称算法所需的秘钥
(3) ● 除此之外,RSA算法还在身份认证(或称鉴权)以及数字签名方面得到广泛的使用
//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]);
效果