MXRSA

MXRSA - 使用mbedtls的简单RSA工具库


Keywords
ios, rsa
License
Zed
Install
pod try MXRSA

Documentation

MXRSA

使用 mbedtls 实现RSA简单封装。

由于苹果没有提供官方的RSA加密接口,导致RSA加密在iOS上是一件很痛苦的事情。一般都使用两种方式:

  1. 使用openssl库, 但是该库太大,拥有过多其他不需要的加密算法
  2. 使用Security库进行RSA加密, 如 Objective-C-RSA .但是问题是keychain本身是一件不靠谱的事情,在某些系统中会偶现keychain错误 -34018的情况,也就导致RSA加解密偶尔会失败。

所以我花了一些时间,找到了mbedtls这个比较轻量级的加密库,在其基础上抽离出基础的RSA加解密功能,并进行共享。

使用示例 :

example项目,如下代码:

NSData *input = [@"hello world !!!" dataUsingEncoding:NSUTF8StringEncoding];
NSString *private = [[NSBundle mainBundle] pathForResource:@"pri.pem" ofType:nil];
NSString *public = [[NSBundle mainBundle] pathForResource:@"pub.pem" ofType:nil];
NSData *cipher;
NSData *plain;

cipher = [MXRSA encryptData:input usingPublicKeyFile:public];
plain = [MXRSA decryptData:cipher usingPrivateKeyFile:private];
NSLog(@"%@",[[NSString alloc] initWithData:plain encoding:NSUTF8StringEncoding]);

cipher = [MXRSA encryptData:input usingPlulicKeyString:PublicKey];
plain = [MXRSA decryptData:cipher usingPrivateKeyString:PrivateKey];
NSLog(@"%@",[[NSString alloc] initWithData:plain encoding:NSUTF8StringEncoding]);

cipher = [MXRSA encryptData:input usingPrivateKeyFile:private];
plain = [MXRSA decryptData:cipher usingPublicKeyFile:public];
NSLog(@"%@",[[NSString alloc] initWithData:plain encoding:NSUTF8StringEncoding]);

cipher = [MXRSA encryptData:input usingPrivateKeyString:PrivateKey];
plain = [MXRSA decryptData:cipher usingPlulicKeyString:PublicKey];
NSLog(@"%@",[[NSString alloc] initWithData:plain encoding:NSUTF8StringEncoding]);


NSString *publicStr;
NSString *privateStr;
[MXRSA generatePrivateKey:&privateStr PublicKey:&publicStr byKeySize:MXRSAKeySize1024];
cipher = [MXRSA encryptData:input usingPrivateKeyString:privateStr];
plain = [MXRSA decryptData:cipher usingPlulicKeyString:publicStr];
NSLog(@"%@",[[NSString alloc] initWithData:plain encoding:NSUTF8StringEncoding]);

注意事项

config.h中,提供了前缀定制宏 PREFIX_DEFINE , 如果需要定制自己的前缀,则需要修改该宏 ,如修改为:

#define PREFIX_DEFINE(func)   ABC_##func

这里也就是为什么不使用靠谱且较多人使用的openssl的原因, 如果要单独做一个SDK,该SDK中需要RSA加密,那就不能依赖openssl,一是会增大体积,二是会有符号冲突。

公私钥文件的格式,都是pkcs8格式的。 一定要注意换行符。

支持Cocoapods

pod MXRSA