MXRSA 0.0.4

MXRSA 0.0.4

luoxianming 维护。



MXRSA 0.0.4

  • 作者:
  • lxm

MXRSA

使用 mbedtls 实现对 RSA 的简单封装。

由于苹果没有提供官方的 RSA 加密接口,导致在 iOS 上进行 RSA 加密非常困难。通常有两种方法:

  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