最近做了一个移动项目,是有服务器和客户端类型的项目,客户端是要登录才行的,服务器也会返回数据,服务器是用Java开发的,客户端要同时支持多平台(Android、iOS),在处理iOS的数据加密的时候遇到了一些问题。起初采取的方案是DES加密,老大说DES加密是对称的,网络抓包加上反编译可能会被破解,故采取RSA方式加密。RSA加密时需要公钥和私钥,客户端保存公钥加密数据,服务器保存私钥解密数据。(iOS端公钥加密私钥解密、java端公钥加密私钥解密,java端私钥加密公钥解密都容易做到,iOS不能私钥加密公钥解密,只能用于验签)。
问题
问题1:iOS端公钥加密的数据用Java端私钥解密。
iOS无论使用系统自带的sdk函数,用mac产生的或者使用java的jdk产生的公钥和私钥,进行加密解密自己都可以使用。不过ios加密,java解密,或者反过来就不能用了。要么是无法创建报告个-9809或-50的错误,要么解出来是乱码。ios系统函数种只有用公钥加密,私钥解密的方式。而公钥加密每次结果都不同。
MAC上生成公钥、私钥的方法,及使用
1.打开终端,切换到自己想输出的文件夹下
2.输入指令:openssl(openssl是生成各种秘钥的工具,mac已经嵌入
3.输入指令:genrsa -out rsa_private_key.pem 1024 (生成私钥,java端使用的)
4.输入指令:rsa -in rsa_private_key.pem -out rsa_public_key.pem -pubout (生成公钥)
5.输入指令:pkcs8 -topk8 -in rsa_private_key.pem -out pkcs8_rsa_private_key.pem -nocrypt(私钥转格式,在ios端使用私钥解密时用这个私钥)
注意:在MAC上生成三个.pem格式的文件,一个公钥,两个私钥,都可以在终端通过指令vim xxx.pem 打开,里面是字符串,第三步生成的私钥是java端用来解密数据的,第五步转换格式的私钥iOS端可以用来调试公钥、私钥解密(因为私钥不留在客户端)
详细步骤
问题2:服务器返回数据也要加密,老大打算用java私钥加密,ios用公钥解密(由于iOS做不到用私钥加密公钥解密,只能私钥加密公钥验签),所以这种方案也有问题。
通过看一些大牛的介绍,了解了iOS常用的加密方式
1 通过简单的URLENCODE + BASE64编码防止数据明文传输
2 对普通请求、返回数据,生成MD5校验(MD5中加入动态密钥),进行数据完整性(简单防篡改,安全性较低,优点:快速)校验
3 对于重要数据,使用RSA进行数字签名,起到防篡改作
4 对于比较敏感的数据,如用户信息(登陆、注册等),客户端发送使用RSA加密,服务器返回使用DES(AES)加密
原因:客户端发送之所以使用RSA加密,是因为RSA解密需要知道服务器私钥,而服务器私钥一般盗取难度较大;如果使用DES的话,可以通过破解客户端获取密钥,安全性较低。而服务器返回之所以使用DES,是因为不管使用DES还是RSA,密钥(或私钥)都存储在客户端,都存在被破解的风险,因此,需要采用动态密钥,而RSA的密钥生成比较复杂,不太适合动态密钥,并且RSA速度相对较慢,所以选用DES)
所以此次加密,我们选择了第四种加密方式
加密方式
ios端进行DES加密、解密时非常方便
1
2
3
1、引入头文件 #import "DES3Util.h"
2、加密时调用类方法 +(NSString *) encryptUseDES:(NSString *)plainText key:(NSString *)key;
3、解密时调用类方法 +(NSString *)decryptUseDES:(NSString *)cipherText key:(NSString *)key;
ios端进行RSA加密、解密时非常方便
1
2
3
4
5
6
7
1、引入头文件 #import "RSAUtil.h"
2、公钥加密时调用类方法:
+ (NSString *)encryptString:(NSString *)str publicKey:(NSString *)pubKey;
+ (NSData *)encryptData:(NSData *)data publicKey:(NSString *)pubKey;
3、私钥解密时调用类方法
+ (NSString *)decryptString:(NSString *)str privateKey:(NSString *)privKey;
+ (NSData *)decryptData:(NSData *)data privateKey:(NSString *)privKey;
ios端进行MD5加密、解密时非常方便
1
2
1、引入头文件 #import "MD5Util"
2、加密时调用方法:- (NSString *)md5:(NSString *)str;
ios端进行AES加密、解密时非常方便
1
2
3
4
5
1、引入头文件 #import "AES.h"
2、加密时调用方法
+ (NSString *)encrypt:(NSString *)message password:(NSString *)password;
2、解密时调用的方法
+ (NSString *)decrypt:(NSString *)base64EncodedString password:(NSString *)password;
有关RSA、MD5、AES加密的原理介绍
效果图
微信扫一扫
订阅每日移动开发及APP推广热点资讯
公众号:
CocoaChina
我要投稿收藏文章
分享到:
18
上一篇:[译] NSScanner:一个陌生的条件判断利器!
下一篇:微信,QQ这类IM app怎么做——谈谈Websocket
相关资讯
iOS-UIPickerView 详解总结
iOS开发之 Method Swizzling 深入浅出
iOS开发之UIRefreshControl使用踩坑
iOS开发之TabBar再次点击实现刷新
浅谈iOS进阶路线
iOS ViewController Dealloc监听
iOS开发学习路线
iOS开发小知识笔记
iOS蓝牙开发CoreBlueTooth库核心方法使用介绍
iOS性能分析和优化
我来说两句
发表评论
所有评论(6)
仰望星空的猪2016-06-13 22:18:03
mark
0 0 回复
katty_fat2016-06-07 01:42:55
有点 我不明白 我公司就是一直用公钥加密 和公钥解密 为什么你说 ios只能公钥加密 私钥解密呢
0 0 回复
稂光雨2016-05-28 00:32:58
请问你们使用aes加密如何能够做到ios和java加密解密统一?
0 0 回复
kengsir2016-05-27 19:14:34
iOS,一行代码进行RSA、DES 、AES、MD5加密、解密详细解释:http://www.code4app.com/forum.php?mod=viewthread&tid=7750&highlight=RSA
1 0 回复
futureliving2016-05-27 17:23:49
base64呢?
0 0 回复
MaydayiOS2016-05-27 19:20:35
回复:futurelivingbase64只是一种编码格式吧..
0 0 回复
热门资讯
美团iOS面试败北感悟
点击量4837
苹果开发者计划许可协议更新
点击量4556
如果因为不懂就拒绝区块链,那真的有点遗憾了…
点击量2428
辞职文案火了,程序员的辞职理由要命不要钱。
点击量2074
RunLoop解决卡顿问题
点击量2043
iOS惯用第三方框架总结(必看)
点击量1885
美媒假想苹果在华禁售:苹果损失有多大 谁会受益
点击量1809
两男子想抢劫马云,蹲守两天连阿里巴巴几个门都没摸清楚
点击量1738
iOS面试知识点整理
点击量1727
iOS图片浏览器(功能强大/性能优越)
点击量1654
综合评论
都是干货
ssxIOS评论了老司机 iOS 周报 #17 | 2018-05-...
为什么要交换交换ImageNamed 和 lg_imageNamed这两个方法呢。用意是什么。
584837022评论了iOS皮肤切换方案
有实例demo可以学习么?感谢分享
子非扬评论了iOS新闻类App内容页技术探索...
swfit面向代理,最近在看小码哥底层班视频,需要的可以看我资料
CO_LTD评论了设计模式(Swift) - 1.MVC和代理...
这个很棒,最近在看小码哥底层班视频,需要的可以看我资料
CO_LTD评论了iOS:一用就上瘾的跑马灯视图...
还可以,最近在看小马哥底层班视频,需要的可以看我资料
CO_LTD评论了iOS皮肤切换方案
还可以,最近在看小马哥底层班视频,需要的可以看我资料
CO_LTD评论了iOS皮肤切换方案
重新加载rootviewcontroller什么意思,重新new一个吗?
被虍成神评论了iOS皮肤切换方案
可以看下我写的主题替换的方案,实时替换,自定义都ok,
https://github.com/CranzCapatain/IATheme
克雷兹_JF评论了iOS皮肤切换方案
有空深究下
love270628124评论了iOS新闻类App内容页技术探索...
相关帖子
VPN Plus 运行就直接崩溃,怎么了?
怎么提取 div的所有内容
皇冠体育平台出售系统流程梳理
彩票平台出租程序员的生活
开发者支持热线打了半个小时都没打通
苹果审核遇到app名称不可以有“正版”两个字,大家有遇到这个情况吗?
各位大佬,如何在高德地图上的地图转成天地图的地图
AVPlayer 现实问题
不包含应用的iTunes,还有什么用呢?
sinaweixinmail回到顶部
关于我们 商务合作 联系我们 合作伙伴
北京触控科技有限公司版权所有
©2018 Chukong Technologies,Inc.京ICP备 11006519号 京ICP证 100954号 京公网安备11010502020289 京网文[2012]0426-138号