iOS-RSA非对称加解密

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Feng512275/article/details/83019660

实验目标

  1. 编程语言不限
  2. 至少实现RSA生成公私钥,并保存为密钥文件,最好是ECC算法
  3. 明文“学号+姓名+专业+学院”
  4. 使用其中一种密钥加密,输出密文
  5. 解密密文,输出明文
  6. 调研PKI公钥体系,在报告中说明,如何用公私钥实现PKI体系
  7. 简述ECC算法的原理

代码

#import "ViewController.h"
#import "RSA.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    //明文信息
    NSString *plainText = @"3180807001+黄振锋+计算机科学与按技术+网络空间安全学院";   
    //取出公钥
    NSString *publicKey_path = [[NSBundle mainBundle] pathForResource:@"rsa_public_key" ofType:@"pem"];
    NSString *publicKeyStr = [NSString stringWithContentsOfFile:publicKey_path encoding:NSUTF8StringEncoding error:nil];
    //取出私钥
    NSString *privateKey_Path = [[NSBundle mainBundle] pathForResource:@"rsa_private_key_pkcs8" ofType:@"pem"];
    NSString *privateKeyStr = [NSString stringWithContentsOfFile:privateKey_Path encoding:NSUTF8StringEncoding error:nil];
    NSLog(@"公钥:%@",publicKeyStr);
    NSLog(@"私钥:%@",privateKeyStr);
    //使用私钥加密
    NSString *secretText = [RSA encryptString:plainText privateKey:privateKeyStr];
    NSLog(@"密文:%@",secretText);
    
    //使用公钥解密
    NSString *plainText1 = [RSA decryptString:secretText publicKey:publicKeyStr];
    NSLog(@"明文:%@",plainText1);
}
+ (NSString *)encryptString:(NSString *)str privateKey:(NSString *)privKey{
	NSData *data = [RSA encryptData:[str dataUsingEncoding:NSUTF8StringEncoding] privateKey:privKey];
	NSString *ret = base64_encode_data(data);
	return ret;
}
+ (NSString *)decryptString:(NSString *)str publicKey:(NSString *)pubKey{
	NSData *data = [[NSData alloc] initWithBase64EncodedString:str options:NSDataBase64DecodingIgnoreUnknownCharacters];
	data = [RSA decryptData:data publicKey:pubKey];
	NSString *ret = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
	return ret;
}

在这里插入图片描述

在这里插入图片描述


总结

实验过程中,我使用OpenSSL生成公私钥对,但是Objective-C语言中,不支持直接生成私钥格式,私钥格式需要转换为PKCS8格式才能正常使用,而公钥使用正常格式即可。实验思路非常清晰,首先使用OpenSSL生成的公私钥对后,直接放入项目中,然后读取公私钥文件里面的字符串,进而对明文进行加解密。然后很愉快地结束了本次实验。

PKI公钥体系,即CA认证。首先A先生成一对公私钥,然后向CA申请认证,CA确认过后,记录A的信息,然后再A的证书里面写上签发机构、有效时间、扩展信息、域名信息、申请者、公钥等信息,由此来标明这是A的认证。然后B也需要向CA申请,流程和A一样。当A和B想通讯时候,A向CA机构下载B的认证,B向CA机构下载A的认证,然后通过RSA技术进行信息的加密传输。由此由公钥实现了PKI体系。

ECC算法是椭圆加密算法,是一种公钥机密体制,算法原理如下:
1、 A选定一条椭圆曲线,并取椭圆线上一点G作为基点。
2、 A选择一个私有秘钥k,并生成公钥K=kG
3、 A将和点K,G传给用户B
4、 B接到信息后,即将待传输的明文编码到上一点M,并产生随机数r
5、 B计算;
6、 B将传给A
7、 A接到消息后,计算,结果就是M,在对M进行解码就得到明文

PS:使用OpenSSL生成公私钥

猜你喜欢

转载自blog.csdn.net/Feng512275/article/details/83019660
今日推荐