iOS-(rsa)非对称加密的简单生成和运用

在上一篇文章中,笔者简单的阐述了,对称加密和非对称加密的一些概念,有兴趣的同学可以了点击下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公钥文件,这两个文件是我们在代码中用到的。
然后我们到代码中,先看如下代码结构图:


iOS-(rsa)非对称加密的简单生成和运用_第1张图片
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 *)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);
}

启动之后,点击屏幕,打印控制台如下:

iOS-(rsa)非对称加密的简单生成和运用_第2张图片
image.png

上述过程,简单的运用了下rsa非对称加密的方式来加密hello world文字,然后进行解密。所以是不是没有想象中那么复杂。大家有兴趣可以跑跑代码试一试,代码地址已经奉上: 代码地址:rsa非对称加密demo
在此,补充一些知识点:
1、其实rsa加密效率相对而言不是很好,因为其一些加密的特性,所以一般我们用来加密一些小数据。
2、我们最常用的rsa加密,一般用在加密一些重要的key,还有就是数字签名等一些小数据加密。

你可能感兴趣的:(iOS-(rsa)非对称加密的简单生成和运用)