iOS进阶_密码学进阶(四.非对称加密算法代码实现)

把封装好的工具类拖进工程,再把生成的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(对称加密) 组合使用

  1. AES对数据本身加密 & 解密
  2. RSA 对AES(KEY)密钥进行加密

因为RSA(非对称加密)效率的原因,因此只能针对小型数据使用,比如数字签名,与AES(对称加密)中使用的KEY。而对大量数据的话就要使用AES(对称加密)了。

数字签名流程

客户端:
数据报文(客户端发送给服务器的数据),通过HASH算法进行MD5加密获取32位字符串(数据指纹),注意此MD5字符串是不可逆的
再通过RSA使用公钥加密算法加密MD5字符串,加密之后的密文就是数字签名
同时把数据报文与数字签名发送给服务器

服务器:
服务器拿到数据报文与数字签名后,通过私钥解密数字签名,拿到MD532位字符串
再把数据报文进行MD5加密,获取加密后的MD532位字符串
服务器通过步骤1和步骤2分别获取的MD5串对比,判断此数据报文是否有被篡改过

实际开发中,使用数字签名验证数据真伪,使用RSA公钥私钥进行数据本身的加密解密,来确保数据的安全性

GitHub地址

猜你喜欢

转载自blog.csdn.net/wtdask/article/details/80354540