通过ios实现RSA加密和解密
2016-02-16 19:44
573 查看
在加密和解密中,我们需要了解的知识有什么事openssl;RSA加密算法的基本原理;如何通过openssl生成最后我们需要的der和p12文件。
废话不多说,直接写步骤:
第一步:openssl来生成公钥和私钥证书,最后需要得到公钥证书和私钥证书
。这是在mac
OX系统下显示的证书,如果我们用文本编辑器打开它,会发现里面是----BEGIN RSA 开头 并且----END RSA 结尾的一串字符串。
第二步:我们需要在代码中写我们的加密和机密方法,加密的字符串通过公钥进行加密,加密后的字符串也可以通过私钥进行解密。
1.在命令行下通过openssl指令获得证书
在命令行种可能需要你的一些信息去生成公钥和私钥
Country Name (2 letter code) [AU]:CN// 国家码
State or Province Name (full name) [Some-State]:china//地区码
Locality Name (eg, city) []:wuhan// 本地码
Organization Name (eg, company) [Internet Widgits Pty Ltd]:airway// 公司名称
Organizational Unit Name (eg, section) []:airway// 部门
Common Name (eg, YOUR name) []:airway// 名字
Email Address []://邮箱
通过在命令行中的操作,我们最后可以得到我们需要的公钥和私钥文件。
2.我们需要完善我们的代码来实现RSA加密和解密
①先请你把 public_key.der 和 private_key.p12
拖进你的Xcode项目里去 ;
②请引入 Security.framework 以及 NSData+Base64.h/m 到项目里;(具体代码看我的相关博客)
③写RSAEncryptor.h/m文件到项目里;
(具体代码看我相关博客)
④写加密解密方法
Cpp代码
RSAEncryptor *rsa = [[RSAEncryptor alloc] init];
NSLog(@"encryptor using rsa");
NSString *publicKeyPath = [[NSBundle mainBundle] pathForResource:@"public_key" ofType:@"der"];
NSLog(@"public key: %@", publicKeyPath);
[rsa loadPublicKeyFromFile:publicKeyPath];
NSString *securityText = @"hello ~";
NSString *encryptedString = [rsa rsaEncryptString:securityText];
NSLog(@"encrypted data: %@", encryptedString);
__[rsa rsaEncryptString:securityText]__会返回decrypted base64编码的字符串:
console out 写道
encrypted data: I1Mnu33cU7QcgaC9uo2bxV0vyfJSqAwyC3DZ+p8jm0G2EmcClarrR5R2xLDdXqvtKj+UJbES7TT+AgkK1NDoQvOJBY+jkmrpAchmRbV2jvi3cEZYQG955jrdSAu21NzQe8xWtEc3YzP+TACPdP4B3Cyy0u8N2RcSFWyxu0YKPXE=
在iOS下解码需要先加载private key, 之后在对数据解码. 解码的时候先进行Base64 decode, 之后在用private key decrypt加密数据.
Cpp代码
NSLog(@"decryptor using rsa");
[rsa loadPrivateKeyFromFile:[[NSBundle mainBundle] pathForResource:@"private_key" ofType:@"p12"] password:@"123456"];
NSString *decryptedString = [rsa rsaDecryptString:encryptedString];
NSLog(@"decrypted data: %@", decryptedString);
之后会输出解密后的数据:
console 写道
decryptor using rsa
decrypted data: hello ~
废话不多说,直接写步骤:
第一步:openssl来生成公钥和私钥证书,最后需要得到公钥证书和私钥证书
。这是在mac
OX系统下显示的证书,如果我们用文本编辑器打开它,会发现里面是----BEGIN RSA 开头 并且----END RSA 结尾的一串字符串。
第二步:我们需要在代码中写我们的加密和机密方法,加密的字符串通过公钥进行加密,加密后的字符串也可以通过私钥进行解密。
1.在命令行下通过openssl指令获得证书
#!/usr/bin/env bash echo "Generating RSA key pair ..." echo "1024 RSA key: private_key.pem" openssl genrsa -out private_key.pem 1024 echo "create certification require file: rsaCertReq.csr" openssl req -new -key private_key.pem -out rsaCertReq.csr echo "create certification using x509: rsaCert.crt" openssl x509 -req -days 3650 -in rsaCertReq.csr -signkey private_key.pem -out rsaCert.crt echo "create public_key.der For IOS" openssl x509 -outform der -in rsaCert.crt -out public_key.der echo "create private_key.p12 For IOS. Please remember your password. The password will be used in iOS." openssl pkcs12 -export -out private_key.p12 -inkey private_key.pem -in rsaCert.crt echo "create rsa_public_key.pem For Java" openssl rsa -in private_key.pem -out rsa_public_key.pem -pubout echo "create pkcs8_private_key.pem For Java" openssl pkcs8 -topk8 -in private_key.pem -out pkcs8_private_key.pem -nocrypt echo "finished."
在命令行种可能需要你的一些信息去生成公钥和私钥
Country Name (2 letter code) [AU]:CN// 国家码
State or Province Name (full name) [Some-State]:china//地区码
Locality Name (eg, city) []:wuhan// 本地码
Organization Name (eg, company) [Internet Widgits Pty Ltd]:airway// 公司名称
Organizational Unit Name (eg, section) []:airway// 部门
Common Name (eg, YOUR name) []:airway// 名字
Email Address []://邮箱
通过在命令行中的操作,我们最后可以得到我们需要的公钥和私钥文件。
2.我们需要完善我们的代码来实现RSA加密和解密
①先请你把 public_key.der 和 private_key.p12
拖进你的Xcode项目里去 ;
②请引入 Security.framework 以及 NSData+Base64.h/m 到项目里;(具体代码看我的相关博客)
③写RSAEncryptor.h/m文件到项目里;
(具体代码看我相关博客)
④写加密解密方法
加密数据
Cpp代码RSAEncryptor *rsa = [[RSAEncryptor alloc] init];
NSLog(@"encryptor using rsa");
NSString *publicKeyPath = [[NSBundle mainBundle] pathForResource:@"public_key" ofType:@"der"];
NSLog(@"public key: %@", publicKeyPath);
[rsa loadPublicKeyFromFile:publicKeyPath];
NSString *securityText = @"hello ~";
NSString *encryptedString = [rsa rsaEncryptString:securityText];
NSLog(@"encrypted data: %@", encryptedString);
__[rsa rsaEncryptString:securityText]__会返回decrypted base64编码的字符串:
console out 写道
encrypted data: I1Mnu33cU7QcgaC9uo2bxV0vyfJSqAwyC3DZ+p8jm0G2EmcClarrR5R2xLDdXqvtKj+UJbES7TT+AgkK1NDoQvOJBY+jkmrpAchmRbV2jvi3cEZYQG955jrdSAu21NzQe8xWtEc3YzP+TACPdP4B3Cyy0u8N2RcSFWyxu0YKPXE=
解密数据
在iOS下解码需要先加载private key, 之后在对数据解码. 解码的时候先进行Base64 decode, 之后在用private key decrypt加密数据.Cpp代码
NSLog(@"decryptor using rsa");
[rsa loadPrivateKeyFromFile:[[NSBundle mainBundle] pathForResource:@"private_key" ofType:@"p12"] password:@"123456"];
NSString *decryptedString = [rsa rsaDecryptString:encryptedString];
NSLog(@"decrypted data: %@", decryptedString);
之后会输出解密后的数据:
console 写道
decryptor using rsa
decrypted data: hello ~
相关文章推荐
- iOS本地推送(本地通知)
- Xcode预处理命令、控制台调试命令、 iOS事件拦截
- Missing iOS Distribution signing identity for …, 在打包的时候发现证书过期了。
- iOS的DeviceToken随生产环境和开发环境变化
- iOS 开发中,如何实现高效的大量(如十万级)推送通知?
- ios开发有关远程推送的测试版和正式发布版的区别
- 配置超级用户口令(Cisco IOS系统)
- iOS 设置头像圆角效果
- iOS 开发证书签发者无效
- iOS 关联外部应用
- iOS 通知 证书 设置指南
- iOS推送小结(证书的生成、客户端的开发、服务端的开发)
- ios 开发--使用模态跳转了2次之后怎么从第三个视图控制器回到跟视图控制器
- 如何成为一名入门级 iOS 开发者
- iOS中关于证书签发者无效的问题
- 《转载》IOS高级开发~开机启动&无限后台运行&监听进程
- IOS开发证书变成“此证书的签发者无效”解决方法
- iOS 推送的ios证书配置
- NSString简介
- iOS Provisioning Profile(Certificate)与Code Signing详解