ResourceCryptor 1.0.3

ResourceCryptor 1.0.3

“JadenTeng” 维护。



  • JadenTeng

ResourceCryptor 是一款在 iOS 上使用 Objective-C 实现的简单 RSAAESDES 加密/解密和 MD5SHA_1SHA_256SHA_224SHA_512 以及 HMAC HmacMD5HmacSHA1_SHA224_SHA256_SHA384_SHA512 的 NSData、NSString 分类框架,它是一款轻量级的加解密框架。

特点

  • 全面测试。
  • 简单界面。
  • 支持访问组和辅助功能。

入门指南

由于 Objective-C 的加密代码过于冗长,作者重新封装了一些常见的加密方法,使加密解密更加简单易用。如果您正在使用一些需要加密数据的方法而感到复杂,相信 ResourceCryptor 会让您更容易处理加解密数据。

  • 使用 RSA 加密解密提供了库中 R_SA.h 文件中的最简单的单例 RSA_
  • ResourceCryptor.h 中提供了常规 AES DES 加解密 SHA_256 MD5 等...
  • RSA 如何生成公钥、密钥以及 .der .p12 证书在文章末尾说明。

RSA (encrypt)加密

RSA 公钥为 String 或 der 证书类型
  1. 加载 RSA 公钥 add_pubKeyadd_pubPath
// 1:加载公钥为String类型 
RSA_.add_pubKey(pubkey);
// 2:加载公钥 path:der格式的公钥证书
RSA_.add_pubPath(path);
  1. 加载 RSA 密钥
//1 通过privkey 为String类型 加载 
RSA_.add_privateKey(privkey);
//2 通过path 为der证书类型 加载 
RSA_.add_privatePath(path);

RSA (decrypt)解密

  1. 使用公钥加密
// 1:通过公钥加密content:文本类容
RSA_.EN_String(content)
// 2:通过公钥加密data:文本类容data
RSA_.EN_Data(data)
  1. 解密 RSA
//en_str 解密的类容string
RSA_.DE_String(en_str)
//en_data 解密的类容data
RSA_.DE_String(en_data)

AES DES EN加密与DE解密

  • AES 加解密 字符串 EN_AES(key,iv) key: 加密密钥 iv: IV向量
//1.加密content文本 使用AES加密
NSString *en_str = content.EN_AES(key,iv);
//2.解密文本 de_str:解密的内容
NSString *de_str.DE_AES(key,iv)
  • AES 加解密 数据 EN_AES(key,iv) key: 加密密钥 iv: IV向量
//1.加密json对象 使用AES加密
NSData *en_data = json.EN_AES(key,iv);
//2.解密AES de_str:解密的data数据
NSData *de_data.DE_AES(key,iv)
//3.转换为jsonObject
NSDictionary *jsonObj= de_data.DE_AES(key,iv)
  • DES 加解密 字符串 EN_DES(key,iv) key: 加密密钥 iv: IV向量
//1.加密content文本 使用DES加密
NSString *en_str = content.EN_DES(key,iv);
//2.解密文本 de_str:解密的内容
NSString *de_str.DE_DES(key,iv)
  • DES 加解密 数据 EN_DES(key,iv) key: 加密密钥 iv: IV向量
//1.加密json对象 使用DES加密
NSData *en_data = json.EN_DES(key,iv);
//2.解密AES de_str:解密的data数据
NSData *de_data.DE_DES(key,iv)
//3.转换为jsonObject
NSDictionary *jsonObj= de_data.DE_DES(key,iv)

HMAC

  1. MD_5 SHA_1 SHA_224 SHA_384 SHA_256 SHA_512
NSLog(@"MD_5:%@",string.MD_5);
NSLog(@"SHA_1:%@",string.SHA_1);
NSLog(@"SHA_224:%@",string.SHA_224);
NSLog(@"SHA_384:%@",string.SHA_384);
NSLog(@"SHA_256:%@",string.SHA_256);
NSLog(@"SHA_512:%@",string.SHA_512);
  1. HMAC SHA_MD5_HMAC SHA_256_HMAC SHA_1_HMAC SHA_224_HMAC SHA_384_HMAC SHA_512_HMAC
NSLog(@"MD_5:%@",string.SHA_MD5_HMAC_block(key));
NSLog(@"SHA_256:%@",string.SHA_256_HMAC_block(key));
NSLog(@"SHA_224:%@",@"hello".SHA_224_HMAC_block(key));
NSLog(@"SHA_1:%@",@"hello".SHA_1_HMAC_block(key));

Carthage

github "JadenTeng/ResourceCryptor"

CocoaPods

pod 'ResourceCryptor'  

手动安装

将ResourceCryptor文件夹拖入项目中,导入头文件:#import "ResourceCryptor.h"

需求

  • iOS 9.0+

加密介绍

ResourceCryptor 使用苹果系统自带相关函数进行加密解密 对于普遍APP的加密方式:客户端用RSA的公钥加密AES密钥,服务器端用私钥解密从app获得的AES密钥,客户端再与服务器进行AES加密的数据传输。


加密解密概念

  • 对称加密算法:加密解密都使用相同的密钥,速度快,适合对大数据加密,方法有DES,3DES,AES等
  • 非对称加密算法:非对称加密算法需要两个密钥:公开密钥(public key)和私有密钥(private key)。公开密钥和私有密钥是一对,可逆的加密算法。使用公钥加密,用私钥解密;使用私钥加密,用公钥解密。速度慢,适合对小数据进行加密,方法有RSA。
  • 散列算法(加密后不能解密,上面的都是可以解密的):用于密码的密文存储,服务器端是判断加密后的数据。不可逆加密方法:MD5、SHA1、SHA256、SHA512。

RSA算法原理:

  1. 找出两个“很大”的质数:P 和 Q(上百位) N = P * Q,M = (P – 1) * (Q – 1)
  2. 找出整数E,E与M互质,即除了1之外,没有其他公约数
  3. 找出整数D,使得ED除以M余1,即 (E * D) % M = 1
  4. 经过上述准备工作后,可以得到:E是公钥,负责加密;D是私钥,负责解密;N负责公钥和私钥之间的联系。
  5. 加密算法,假定对X进行加密(X ^ E) % N = Y(公式6);解密算法,根据费尔马小定理,可以使用以下公式完成解密(Y ^ D) % N = X。

关于如何生成:公钥、私钥、der证书签名

公钥:签名机构签完给我们颁发的,放在网站的根目录上,可以分发。私钥:一般保存在中心服务器。

注:RSA为一种加密算法,生成的文件格式有两种,一种是PEM格式,另一种是DER格式。在Mac OSX中,pem格式是不能打开的,因此我们生成PEM文件之后,需要生成DER格式。

加密解密使用了两种文件 .p12是私钥 .der是公钥,终端命令生成步骤如下:
  1. 打开终端 openssl
  2. 创建私钥 genrsa -out rsa_private_key.pem 1024
  3. 生成公钥 rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
  4. 生成证书请求文件.csr …输入信息 …输入密码 req -new -key rsa_private_key.pem -out ca.csr

终端提示如下:

  • 国家名字、代码
  • 省的名字
  • 城市的名字
  • 公司的名字
  • 公司的单位
  • 我的名字
  • 电子邮件
  • 以及两个附加信息可以跳过
  1. 签名 生成一个.crt的一个base64公钥文件 x509 -req -days 3650 -in ca.csr -signkey rsa_private_key.pem -out ca.crt
  2. 解成.der公钥二进制文件,放程序做加密用 x509 -outform der -in ca.crt -out ca.der
  3. 生成.p12二进制私钥文件 .pem 是base64的不能直接使用,必须导成.p12信息交换文件用来传递密钥 pkcs12 -export -out p.p12 -inkey rsa_private_key.pem -in ca.crt (输入一个导出密码框架中pwd参数需要用的密码))

生成如下证书文件

对于数据加密解密+网络请求(基于AF封装) ResourceX

欢迎使用我的网络请求封装 ResourceX

Release Notes 最近更新

  • 1.0.3 代码优化注释
  • 1.0.2 添加json转换
  • 1.0.1 添加NSdata的转换方法 base64 to NSdata Data to Base64
  • 1.0 最初发布