iOS,一行代码进行RSA、DES 、AES、MD5加密、解密

问题
问题1:iOS端公钥加密的数据用Java端私钥解密。iOS不管使用系统自带的sdk函数,用mac产生的或者使用java的jdk产生的公钥和私钥,进行加密解密本身均可以使用。不过ios加密,java解密,或者反过来就不能用了。要么是没法建立报告个-9809或-50的错误,要么解出来是乱码。ios系统函数种只有用公钥加密,私钥解密的方式。而公钥加密每次结果都不一样。

MAC上生成公钥、私钥的方法,及使用
java

  • 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经常使用的加密方式
ios

  • 1 经过简单的URLENCODE + BASE64编码防止数据明文传输
  • 2 对普通请求、返回数据,生成MD5校验(MD5中加入动态密钥),进行数据完整性(简单防篡改,安全性较低,优势:快速)校验
  • 3 对于重要数据,使用RSA进行数字签名,起到防篡改做
  • 4 对于比较敏感的数据,如用户信息(登录、注册等),客户端发送使用RSA加密,服务器返回使用DES(AES)加密
    缘由:客户端发送之因此使用RSA加密,是由于RSA解密须要知道服务器私钥,而服务器私钥通常盗取难度较大;若是使用DES的话,能够经过破解客户端获取密钥,安全性较低。而服务器返回之因此使用DES,是由于无论使用DES仍是RSA,密钥(或私钥)都存储在客户端,都存在被破解的风险,所以,须要采用动态密钥,而RSA的密钥生成比较复杂,不太适合动态密钥,而且RSA速度相对较慢,因此选用DES)
    因此这次加密,咱们选择了第四种加密方式



加密方式
ios端进行DES加密、解密时很是方便vim

一、引入头文件 #import "DES3Util.h"
二、加密时调用类方法  +(NSString *) encryptUseDES:(NSString *)plainText key:(NSString *)key;
三、解密时调用类方法  +(NSString *)decryptUseDES:(NSString *)cipherText key:(NSString *)key;

ios端进行RSA加密、解密时很是方便安全

一、引入头文件 #import "RSAUtil.h"
二、公钥加密时调用类方法:
+ (NSString *)encryptString:(NSString *)str publicKey:(NSString *)pubKey;
+ (NSData *)encryptData:(NSData *)data publicKey:(NSString *)pubKey;
三、私钥解密时调用类方法 
+ (NSString *)decryptString:(NSString *)str privateKey:(NSString *)privKey;
+ (NSData *)decryptData:(NSData *)data privateKey:(NSString *)privKey;
ios端进行MD5加密、解密时很是方便
一、引入头文件 #import "MD5Util"
二、加密时调用方法:- (NSString *)md5:(NSString *)str;
ios端进行AES加密、解密时很是方便
一、引入头文件 #import "AES.h"
二、加密时调用方法
+ (NSString *)encrypt:(NSString *)message password:(NSString *)password;
二、解密时调用的方法
+ (NSString *)decrypt:(NSString *)base64EncodedString password:(NSString *)password;
相关文章
相关标签/搜索