当前位置: 移动技术网 > IT编程>移动开发>IOS > ios常见加密解密方法(RSA、DES 、AES、MD5)

ios常见加密解密方法(RSA、DES 、AES、MD5)

2019年07月24日  | 移动技术网IT编程  | 我要评论

黄羊泉,打牌小游戏,私立圣皇曼女学院

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网