最近做的需求,涉及到一些安全校验,要求数据传输或者数据解析必须安全一些,所以想到了常用的非对称RSA加密,所以自己尝试练手加密解密某些数据
1.生成公私钥证书
利用MAC系统自带的openssl命令,到一个指定文件夹下(方便自己管理),可以生成一对公私钥信息,命令如下:
1.生成私钥文件
genrsa -out private_key.pem 1024 //生成私钥Pem文件
2.私钥文件做转码处理
pkcs8 -topk8 -inform PEM -in private_key.pem -outform PEM -nocrypt //将私钥文件转成PKCS8格式,否则我们直接data转字符串作为私钥的时候,不成功,这一步是很关键的
控制台输入如下,我们可以将这个文本字符串赋值下来,保存成字符传,去掉换行符
image.png
用到xcode的工程大概为(不要管为啥私钥不一样,因为我随意写的)
image.png
3.生成公钥文件
//这些命令都保证在一个文件夹内操作,这个文件可以直接文本打开读取里面的公钥,为啥不需要编码没get到原理
rsa -in private_key.pem -pubout -out public_key.pem
这样,文件夹下面就会有2个Pem格式的文件了,保留好证书文件,省的字符串发生变化的时候,不知道怎么找回
使用RSA加密数据
基于iOS系统,首先看有没有造好的轮子,有个比较方便的库Objective-C-RSA,可以直接下载使用,就2个文件,API也比较简单
#import <Foundation/Foundation.h>
@interface RSA : NSObject
// return base64 encoded string
+ (NSString *)encryptString:(NSString *)str publicKey:(NSString *)pubKey;
// return raw data
+ (NSData *)encryptData:(NSData *)data publicKey:(NSString *)pubKey;
// return base64 encoded string
+ (NSString *)encryptString:(NSString *)str privateKey:(NSString *)privKey;
// return raw data
+ (NSData *)encryptData:(NSData *)data privateKey:(NSString *)privKey;
// decrypt base64 encoded string, convert result to string(not base64 encoded)
+ (NSString *)decryptString:(NSString *)str publicKey:(NSString *)pubKey;
+ (NSData *)decryptData:(NSData *)data publicKey:(NSString *)pubKey;
+ (NSString *)decryptString:(NSString *)str privateKey:(NSString *)privKey;
+ (NSData *)decryptData:(NSData *)data privateKey:(NSString *)privKey;
@end
感兴趣的小伙伴去尝试吧
网友评论