iOS-(rsa)非对称加密的简单生成和运用
2020-02-26 本文已影响0人
IBigLiang
在上一篇文章中,笔者简单的阐述了,对称加密和非对称加密的一些概念,有兴趣的同学可以了点击下iOS-对称加密和(rsa)非对称加密。这篇文章,笔者主要用rsa相关的一些知识来运用一下。首先,我们可以通过以下的步骤来生成一对公钥和私钥,有两个目的,一是要大家都了解下生成的过程,二就是为我们后面使用公私钥进行rsa加密解密做准备。
所有的操作都是在中端中完成,步骤如下:
第一步:用openssl生成一个private.pem私钥文件
openssl genrsa -out private.pem 1024
第二步:用private.pem生成一个公钥文件
openssl rsa -in private.pem -pubput -out public.pem
第三步:通过private.pem文件生成一个csr文件
openssl req -new -key private.pem -out rsacert.csr
第四步:通过csr文件生成一个crt文件
openssl x509 -req -days 3650 -in rsacert.csr -signkey private.pem -out rsacert.crt
第五步:通过crt文件生成der文件,包含着公钥的信息
openssl x509 -outform der -in rsacert.crt -out rsacert.der
第六步:通过private.pem和crt文件生成p.p12,包含私钥信息
openssl pkcs12 -export -out p.p12 -inkey private.pem -in rsacert.crt
在完成以上的步骤之后,我们就可以得到一个p.p12私钥文件和rsacert.der公钥文件,这两个文件是我们在代码中用到的。
然后我们到代码中,先看如下代码结构图:
image.png
我们可以看到p12和der的两个公私钥文件已经载入,rsa的加密方式文件RSACryptor也到位,这样我们就可以用rsa的加密来试一下:
首先加载公私钥到程序中:
- (void)viewDidLoad {
[super viewDidLoad];
// 加载rsa公钥
[[RSACryptor sharedRSACryptor] loadPublicKey:[[NSBundle mainBundle] pathForResource:@"rsacert.der" ofType:nil]];
// 加载rsa私钥
[[RSACryptor sharedRSACryptor] loadPrivateKey:[[NSBundle mainBundle] pathForResource:@"p.p12" ofType:nil] password:@"123456"];
}
然后用方法去做测试:
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
NSString * message = @"hello world";
// 加密过程
NSData *e = [[RSACryptor sharedRSACryptor] encryptData:[message dataUsingEncoding:NSUTF8StringEncoding]];
// 解密过程
NSData *d = [[RSACryptor sharedRSACryptor] decryptData:e];
// 得到结果
NSString * res = [[NSString alloc] initWithData:d encoding:NSUTF8StringEncoding];
// 打印结果
NSLog(@"%@", res);
}
启动之后,点击屏幕,打印控制台如下:
上述过程,简单的运用了下rsa非对称加密的方式来加密hello world文字,然后进行解密。所以是不是没有想象中那么复杂。大家有兴趣可以跑跑代码试一试,代码地址已经奉上:代码地址:rsa非对称加密demo
在此,补充一些知识点:
1、其实rsa加密效率相对而言不是很好,因为其一些加密的特性,所以一般我们用来加密一些小数据。
2、我们最常用的rsa加密,一般用在加密一些重要的key,还有就是数字签名等一些小数据加密。