随机生成16位数为密钥
NSString *AESkey = [NSString generateRadom:16];
使用RSA+对方的公钥对16位随机密钥进行加密
NSString *encryptKey = [self rsaEncryptString:AESkey];
//AESkey
NSString *encryptDataStr = [self encryptAES256:AESkey unsignText:jsonStr];
大概流程:
客户端给服务器发送数椐的流程:需要注意的是,客户端需要下载服务器端的公钥证书。
客户端:
利用AES对数据内容进行加密。加密的key为16位生成的随机数。
服务器:
服务器端怎么对AES加密的内容进行解密?需要用到 加密时为16位生成的随机数key,但是这个key又不能明文传输到服务器。
怎么办?需要用到服务器端的公钥证书以及RSA非对称的加密算法。
基本流程:从证书提取公钥,作为RSA加密算法的公钥。传递到服务器,服务器端利用自己的私钥来解密,得到解密的16位生成的随机数key。
同时去解密加密的数椐。
服务器端发送数据给客户端:假如服务器端有一个,客户端有多个,服务器端需要客户端的公钥证书。客户端怎么给服务器端自己的公钥证书。
客户端解密的流程:
首先,返回的结果有encryptkey,该字段是服务器端,用客户端的公钥进行加密的。所以,在客户端,需要用私钥对其进行解密。得到16位随机数。
AESKey = [self rsaDecryptString:dataDict[@"encryptkey"]];
然后,得到AESKey之后,对内容进行解密。
paramsDict = [self decryptAES256:AESKey signText:dataDict[@"data"]];
疑问:客户端怎么生成证书?
客户端就相当于一个商户,所以客户端本地的公私钥是有商户自己来生成,生成以后,将公钥上传到服务器,将私钥保存到客户端。