Latest 0.0.4
Homepage https://github.com/CodingForMoney/MXRSA
License LICENSE
Platforms ios 7.0
Authors

使用 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

Latest podspec

{
    "name": "MXRSA",
    "version": "0.0.4",
    "summary": "MXRSA - u4f7fu7528mbedtlsu7684u7b80u5355RSAu5de5u5177u5e93",
    "homepage": "https://github.com/CodingForMoney/MXRSA",
    "authors": {
        "lxm": "luoxianm[email protected]"
    },
    "platforms": {
        "ios": "7.0"
    },
    "source": {
        "git": "https://github.com/CodingForMoney/MXRSA.git",
        "tag": "0.0.4"
    },
    "license": "LICENSE",
    "source_files": "MXRSA/MXRSA.{h,m}",
    "subspecs": [
        {
            "name": "mbedtls",
            "source_files": "MXRSA/mbedtls/*.{h,c}",
            "private_header_files": "MXRSA/mbedtls/*.h"
        }
    ]
}

Pin It on Pinterest

Share This