版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Feng512275/article/details/83019660
实验目标
- 编程语言不限
- 至少实现RSA生成公私钥,并保存为密钥文件,最好是ECC算法
- 明文“学号+姓名+专业+学院”
- 使用其中一种密钥加密,输出密文
- 解密密文,输出明文
- 调研PKI公钥体系,在报告中说明,如何用公私钥实现PKI体系
- 简述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进行解码就得到明文