AES+RSA加密

随机生成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"]];

疑问:客户端怎么生成证书?

客户端就相当于一个商户,所以客户端本地的公私钥是有商户自己来生成,生成以后,将公钥上传到服务器,将私钥保存到客户端。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容