标签:
介绍
特点
与对称加密算法的对比
RSA 算法原理
代码演练
CryptorTools *tools = [[CryptorTools alloc] init];
// 1. 加载公钥
NSString *pubPath = [[NSBundle mainBundle] pathForResource:@"rsacert.der" ofType:nil];
[tools loadPublicKeyWithFilePath:pubPath];
// 2. 使用公钥加密,加密内容最大长度 117
NSString *result = [tools RSAEncryptString:@"abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghi"];
NSLog(@"RSA 加密 %@", result);
// 3. 加载私钥,并指定导出 p12 时设置的密码
NSString *privatePath = [[NSBundle mainBundle] pathForResource:@"p.p12" ofType:nil];
[tools loadPrivateKey:privatePath password:@"123"];
// 4. 使用私钥解密
NSLog(@"解密结果 %@", [tools RSADecryptString:result]);
iOS 相关函数
函数 |
说明 |
SecKeyEncrypt |
使用公钥对数据加密 |
SecKeyDecrypt |
使用私钥对数据解密 |
SecKeyRawVerify |
使用公钥对数字签名进行验证 |
SecKeyRawSign |
使用私钥生成数字签名 |
应用场景
由于 RSA 算法的加密解密速度要比对称算法的速度慢很多,在实际应用中,通常采取:
OpenSSL 终端测试命令
程序开发证书生成
# 生成私钥
$ openssl genrsa -out private.pem 1024
# 创建证书请求
$ openssl req -new -key private.pem -out rsacert.csr
# 生成证书并签名,有效期10年
$ openssl x509 -req -days 3650 -in rsacert.csr -signkey private.pem -out rsacert.crt
# 转换格式-将 PEM 格式文件转换成 DER 格式
$ openssl x509 -outform der -in rsacert.crt -out rsacert.der
# 导出P12文件
$ openssl pkcs12 -export -out p.p12 -inkey private.pem -in rsacert.crt
在苹果开发中,不能直接使用 PEM 格式的证书
数字签名
OpenSSL 生成密钥演练
私钥 & 公钥
# 生成强度是 512 的 RSA 私钥
$ openssl genrsa -out private.pem 512
# 以明文输出私钥内容
$ openssl rsa -in private.pem -text -out private.txt
# 校验私钥文件
$ openssl rsa -in private.pem -check
# 从私钥中提取公钥
$ openssl rsa -in private.pem -out public.pem -outform PEM -pubout
# 以明文输出公钥内容
$ openssl rsa -in public.pem -out public.txt -pubin -pubout -text
加密 & 解密
# 使用公钥加密小文件
$ openssl rsautl -encrypt -pubin -inkey public.pem -in msg.txt -out msg.bin
# 使用私钥解密小文件
$ openssl rsautl -decrypt -inkey private.pem -in msg.bin -out a.txt
格式转换
# 将私钥转换成 DER 格式
$ openssl rsa -in private.pem -out private.der -outform der
# 将公钥转换成 DER 格式
$ openssl rsa -in public.pem -out public.der -pubin -outform der
PKCS
PKCS协议
协议 |
说明 |
PKCS#1 |
定义 RSA 公开密钥算法加密和签名机制,主要用于组织 PKCS#7 中所描述的数字签名和数字信封(专门用来加密/解密) |
PKCS#8 |
描述私有密钥信息格式,该信息包括公开密钥算法的私有密钥以及可选的属性集等(JAVA使用) |
PKCS#12 |
描述个人信息交换语法标准。描述了将用户公钥、私钥、证书和其他相关信息打包的语法(苹果使用) |
标签:
原文地址:http://www.cnblogs.com/fakeCoder/p/5093787.html