iOS项目的一些安全加密认证

最近有接触一个支付相关的项目,项目之前是使用的uniapp开发,纯H5页面,但是项目组涉及到安全问题就说把涉及到安全的问题移到原生,这也是我第一次接触这么多安全加密相关的东西,以前就单纯的对用户密码MD5加个密之类的,Base64加密之类的。

这里对最近的东西做一个记录,安全加密认证验签的问题还蛮常见的。

1、登录接口签名和加密:

我们项目流程如下:

1.首先生成一个16位随机码
2.随机码作为AES密码对用户ID进行加密
3.RSA的公钥对随机码进行加密,作为requestKey放在header请求接口
4.RSA的私钥将你这些参数进行签名,作为sign 传给后台接口

下面是在网上参考的资料,和我们项目的验签和加密类似,但是有点区别,自己相应的修改。

https://www.jianshu.com/p/24d46369e044

RSA验签加密:

对应安卓的MD5withRSA方法,一开始以为就是先MD5再RSA加密,然而并不是,相应的处理下面链接。

https://github.com/HustBroventure/iOSRSAHandler

2、扫码功能DES解密:

我们的扫一扫支付功能处理在原生端,原生端扫码识别字符串进行DES解密传给前端处理支付即可。

DES解密代码如下:

#import "DesUtil.h"
#import 

NSString *const gkey = @"DES/CBC/PKCS5Padding";

const Byte iv[] = {1,2,3,4,5,6,7,8};
// 偏移量
NSString *const glv = @"12365497";

@implementation DesUtil

/// 需要初始化iv的DES解密。(CBC模式)
+ (NSString*)decodeDesCBCWithString:(NSString *)stringCBC {
    
//    NSData*plaindata =nil;
    NSString*plaintext =nil;
    //    NSData *cipherdata = [GTMBase64 decodeString:stringCBC];
    NSData *cipherdata = [[NSData alloc] initWithBase64EncodedString:stringCBC options:NSDataBase64DecodingIgnoreUnknownCharacters];
    unsigned char buffer[1024];
    
    memset(buffer,0,sizeof(char));
    size_t numBytesDecrypted = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmDES,
                                          kCCOptionPKCS7Padding ,
                                          [glv UTF8String],kCCKeySizeDES,
                                          iv,
                                          [cipherdata bytes], [cipherdata length],
                                          buffer,1024,
                                          &numBytesDecrypted);
    
    if (cryptStatus ==kCCSuccess) {
        
        NSData*plaindata = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesDecrypted];
        plaintext = [[NSString alloc]initWithData:plaindata encoding:NSUTF8StringEncoding];
        
    }
    return plaintext;
}
#end

说复杂好像也不复杂,但是刚开始觉得还是摸不清楚~~~

你可能感兴趣的:(iOS项目的一些安全加密认证)