MXRSA
使用 mbedtls 实现对 RSA
的简单封装。
由于苹果没有提供官方的 RSA
加密接口,导致在 iOS
上进行 RSA
加密非常困难。通常有两种方法:
- 使用
openssl
库,但这个库太大,包含了过多不需要的加密算法 - 使用
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