客户端加解密

最近做了一个移动项目,是有服务器和客户端类型的项目,客户端是要登录才行的,服务器也会返回数据,服务器是用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加密的原理介绍

效果图

客户端加解密_第1张图片

微信扫一扫

订阅每日移动开发及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 回复

热门资讯

客户端加解密_第2张图片

美团iOS面试败北感悟

点击量4837

客户端加解密_第3张图片

苹果开发者计划许可协议更新

点击量4556

客户端加解密_第4张图片

如果因为不懂就拒绝区块链,那真的有点遗憾了…

点击量2428

客户端加解密_第5张图片

辞职文案火了,程序员的辞职理由要命不要钱。

点击量2074

客户端加解密_第6张图片

RunLoop解决卡顿问题

点击量2043

客户端加解密_第7张图片

iOS惯用第三方框架总结(必看)

点击量1885

客户端加解密_第8张图片

美媒假想苹果在华禁售:苹果损失有多大 谁会受益

点击量1809

客户端加解密_第9张图片

两男子想抢劫马云,蹲守两天连阿里巴巴几个门都没摸清楚

点击量1738

客户端加解密_第10张图片

iOS面试知识点整理

点击量1727

客户端加解密_第11张图片

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号

你可能感兴趣的:(客户端加解密)