最近做了一个移动项目,是有服务器和客户端类型的项目,客户端是要登录才行的,服务器也会返回数据,服务器是用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、引入头文件
#import "DES3Util.h"
2、加密时调用类方法
+(NSString *) encryptUseDES:(NSString *)plainText key:(NSString *)key;
3、解密时调用类方法
+(NSString *)decryptUseDES:(NSString *)cipherText key:(NSString *)key;
ios端进行RSA加密、解密时非常方便
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、引入头文件
#import "MD5Util"
2、加密时调用方法:
- (NSString *)md5:(NSString *)str;
ios端进行AES加密、解密时非常方便
1、引入头文件
#import "AES.h"
2、加密时调用方法
+ (NSString *)encrypt:(NSString *)message password:(NSString *)password;
2、解密时调用的方法
+ (NSString *)decrypt:(NSString *)base64EncodedString password:(NSString *)password;
效果图
Demo下载:Encryptions_jb51.rar
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# ios
# 加密解密算法
# des加密解密
# rsa加密解密
# 一行代码实现IOS 3DES加密解密
# Android、iOS和Java通用的AES128加密解密示例代码
# iOS base64 加密解密 通用类实例代码
# 揭开iOS逆向解密的神秘面纱
# 公钥
# 客户端
# 头文件
# 是因为
# 较低
# 也有
# 也会
# 是有
# 不太
# 也要
# 可以通过
# 用了
# 就不能
# 可以使用
# 才行
# 第三步
# 时用
# 大家多多
# 切换到
# 较慢
相关文章:
油猴 教程,油猴搜脚本为什么会网页无法显示?
如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?
宝塔面板创建网站无法访问?如何快速排查修复?
建站之星ASP如何实现CMS高效搭建与安全管理?
如何登录建站主机?访问步骤全解析
公众号网站制作网页,微信公众号怎么制作?
制作国外网站的软件,国外有哪些比较优质的网站推荐?
网站制作员失业,怎样查看自己网站的注册者?
微信小程序制作网站有哪些,微信小程序需要做网站吗?
IOS倒计时设置UIButton标题title的抖动问题
如何高效搭建专业期货交易平台网站?
攀枝花网站建设,攀枝花营业执照网上怎么年审?
打鱼网站制作软件,波克捕鱼官方号怎么注册?
深圳企业网站制作设计,在深圳如何网上全流程注册公司?
制作网页的网站有哪些,电脑上怎么做网页?
江苏网站制作公司有哪些,江苏书法考级官方网站?
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
如何挑选高效建站主机与优质域名?
网站微信制作软件,如何制作微信链接?
山东云建站价格为何差异显著?
高端企业智能建站程序:SEO优化与响应式模板定制开发
企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?
如何在橙子建站上传落地页?操作指南详解
已有域名和空间如何快速搭建网站?
潮流网站制作头像软件下载,适合母子的网名有哪些?
海南网站制作公司有哪些,海口网是哪家的?
教学网站制作软件,学习*后期制作的网站有哪些?
建站之星如何快速更换网站模板?
如何有效防御Web建站篡改攻击?
如何通过FTP服务器快速搭建网站?
如何在西部数码注册域名并快速搭建网站?
建站主机核心功能解析:服务器选择与网站搭建流程指南
网站制作费用多少钱,一个网站的运营,需要哪些费用?
如何在宝塔面板中修改默认建站目录?
网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?
广德云建站网站建设方案与建站流程优化指南
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
香港服务器选型指南:免备案配置与高效建站方案解析
整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?
如何在IIS中新建站点并配置端口与IP地址?
建站10G流量真的够用吗?如何应对访问高峰?
网站设计制作公司地址,网站建设比较好的公司都有哪些?
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
如何快速查询域名建站关键信息?
如何快速生成ASP一键建站模板并优化安全性?
电商网站制作价格怎么算,网上拍卖流程以及规则?
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。