把封装好的工具类拖进工程,再把生成的p12文件和.der文件同样拖入工程当中。
注意,要把p12文件和.der文件与工程相关联
不然我们在执行下面代码的时候会直接崩溃,进入工具类的断言中,报出“公钥路径为空”的错误
#import "ViewController.h"
#import "RSACryptor.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 加载公钥
[[RSACryptor sharedRSACryptor] loadPublicKey:[[NSBundle mainBundle]pathForResource:@"rsacert.der" ofType:nil]];
//2.加载私钥 - P12的文件
[[RSACryptor sharedRSACryptor] loadPrivateKey:[[NSBundle mainBundle]pathForResource:@"p.p12" ofType:nil] password:@"123456"];
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
NSData * reault = [[RSACryptor sharedRSACryptor] encryptData:[@"hello wt 哈哈 呵呵 嘿嘿 嘻嘻" dataUsingEncoding:NSUTF8StringEncoding]];
//base64编码
NSString * base64 = [reault base64EncodedStringWithOptions:0];
NSLog(@"加密的信息:%@",base64);
//解密
NSData * jiemi = [[RSACryptor sharedRSACryptor] decryptData:reault];
NSString * jiemiBase64 = [[NSString alloc]initWithData:jiemi encoding:NSUTF8StringEncoding];
NSLog(@"解密的信息:%@",jiemiBase64);
}
@end
在日常开发中,用RSA(非对称加密) & AES(对称加密) 组合使用
- AES对数据本身加密 & 解密
- RSA 对AES(KEY)密钥进行加密
因为RSA(非对称加密)效率的原因,因此只能针对小型数据使用,比如数字签名,与AES(对称加密)中使用的KEY。而对大量数据的话就要使用AES(对称加密)了。
数字签名流程
客户端:
数据报文(客户端发送给服务器的数据),通过HASH算法进行MD5加密获取32位字符串(数据指纹),注意此MD5字符串是不可逆的
再通过RSA使用公钥加密算法加密MD5字符串,加密之后的密文就是数字签名
同时把数据报文与数字签名发送给服务器
服务器:
服务器拿到数据报文与数字签名后,通过私钥解密数字签名,拿到MD532位字符串
再把数据报文进行MD5加密,获取加密后的MD532位字符串
服务器通过步骤1和步骤2分别获取的MD5串对比,判断此数据报文是否有被篡改过
实际开发中,使用数字签名验证数据真伪,使用RSA公钥私钥进行数据本身的加密解密,来确保数据的安全性