RSA+AES(128位/CBC/PKCS5Padding)加解

2021-03-25  本文已影响0人  夜之海澜

最近在搞项目中的加解密相关,选了几种方案,最终定下来用RSA+AES进行加解密,在此记录一下,如果有问题,大家可以一起探讨下~
我们项目中的加密流程是:
1.客户端生成AES随机128位秘钥(base64字符串),得到key为aeskey
2.服务端生成两对RSA公私钥,clientPrivate,clientPublick,servePrivate,servePublick
3.客户端使用clientPrivate对明文数据生成数字签名sign
4.将第3步生成的sign作为入参,加入到请求参数中,然后将整体入参转换为json串
5.客户端使用aeskey对json数据进行加密得到密文(encryptData)
6.客户端使用服务端的servePublick公钥对aeskey进行加密,得到密文(encryptKey)
7.分别将encryptData和encryptKey作为参数传输给服务器端
以上为客户端向服务端传输加密数据的过程。
客户端进行解密操作的话,流程反过来即可。

报文封装

 {
 "content":原始请求报文,
 "sign":签名字符串
 }
 {
 "package1": 第3步的加密结果,
 "package2": 第4步的加密结果
 }

解密和验签过程:

秘钥规格:

   字符串编码 UTF-8

   RSA key长度2048
   RSA 加解密时的算法: RSA/ECB/PKCS1Padding
   RSA 签名时的算法: SHA256withRSA
   
   AES key长度128位
   AES 加解密时的算法: AES/CBC/PKCS5Padding

其中生成128位随机秘钥代码:

- (NSString *)random128BitAESKey {
    unsigned char buf[16];
    arc4random_buf(buf, sizeof(buf));
    NSData *data = [NSData dataWithBytes:buf length:sizeof(buf)];
    NSData *base64Data = [data base64EncodedDataWithOptions:0];
    NSString * stringBase64 = [[NSString alloc] initWithData:base64Data encoding:0];
    return stringBase64;
}
上一篇下一篇

猜你喜欢

热点阅读