iOS 数据加密(3DES/CBC/PKCS5Padding)

2021-05-06  本文已影响0人  骑马纵天下
//密匙 key

#define gkey            @"loprdkldloprdkldloprdkld"

//偏移量

#define gIv             @“12345678"

#import <CommonCrypto/CommonCryptor.h>

//十六进制
+ (NSString *)doEncryptHex:(NSString *)originalStr{
    //把string 转NSData
    NSData* data = [originalStr dataUsingEncoding:NSUTF8StringEncoding];
    //length
    size_t plainTextBufferSize = [data length];
    
    const void *vplainText = (const void *)[data bytes];
    
    CCCryptorStatus ccStatus;
    uint8_t *bufferPtr = NULL;
    size_t bufferPtrSize = 0;
    size_t movedBytes = 0;
    
    bufferPtrSize = (plainTextBufferSize + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);
    bufferPtr = malloc( bufferPtrSize * sizeof(uint8_t));
    memset((void *)bufferPtr, 0x0, bufferPtrSize);
    
    const void *vkey = (const void *) [gkey UTF8String];
    //偏移量
    const void *vinitVec = (const void *) [gIv UTF8String];
    //配置CCCrypt
    ccStatus = CCCrypt(kCCEncrypt,
                       kCCAlgorithm3DES, //使用3DES加密算法
                       kCCOptionPKCS7Padding, //设置填充模式
                       vkey,    //key 此处key的长度 和下面参数指定的长度要相同
                       kCCKeySize3DES,//key的长度为24位,所以  vkey必须是24位长度
                       vinitVec,     //偏移量,这里不用,设置为nil;不用的话,必须为nil,不可以为@“” ECB模式不用设置偏移量
                       vplainText,
                       plainTextBufferSize,
                       (void *)bufferPtr,
                       bufferPtrSize,
                       &movedBytes);
    NSMutableString *hexString = [[NSMutableString alloc] init];


    if (ccStatus == kCCSuccess) {
        NSData *myData = [NSData dataWithBytes:(const char *)bufferPtr length:(NSUInteger)movedBytes];
//        NSString *result = [GTMBase64 stringByEncodingData:myData];//或者输出为base64
        NSUInteger          len = [myData length];
        char *              chars = (char *)[myData bytes];
        for(NSUInteger i = 0; i < len; i++ ){
            [hexString appendString:[NSString stringWithFormat:@"%0.2hhx", chars[i]]];
        }
    }    
    return hexString;  
}

CCCrypt函数参数解析

上一篇 下一篇

猜你喜欢

热点阅读