美文网首页
封装base64编码工具方法

封装base64编码工具方法

作者: Arthur澪 | 来源:发表于2017-12-06 20:50 被阅读0次

进行base64编码

// 功能:传入字符串,输出它的base64编码结果
- (NSString *)getEncryption:(NSString *)data secret:(NSString *)secret{  //传入 需要编码的数据
    
    NSString* key = secret;  //key固定
//    NSString* data = @"Message";
    
    const char *cKey = [key   cStringUsingEncoding:NSASCIIStringEncoding];  //转换为二进制数据
    const char *cData = [data cStringUsingEncoding:NSASCIIStringEncoding];
    
    unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];
    CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
    NSData *hash = [[NSData alloc] initWithBytes:cHMAC length:sizeof(cHMAC)];   //得到一个hash二进制数
//    NSLog(@"%@", hash);
    
    NSString *result = [PDEncryptionTools base64forData:hash];   //调用类方法,参数为hash,进行数据编码,返回编码结果

    return [result stringByReplacingOccurrencesOfString:@"+" withString:@"_"];
}

//功能:进行base64编码
+ (NSString*)base64forData:(NSData*)theData {
    const uint8_t* input = (const uint8_t*)[theData bytes];   //数据 字节 类型转换为 8位2进制
    NSInteger length = [theData length];   //数据的长度
    
    static char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    
    NSMutableData* data = [NSMutableData dataWithLength:((length + 2) / 3) * 4];
    uint8_t* output = (uint8_t*)data.mutableBytes;
    
    NSInteger i;
    for (i=0; i < length; i += 3) {
        NSInteger value = 0;
        NSInteger j;
        for (j = i; j < (i + 3); j++) {
            value <<= 8;
            
            if (j < length) {
                value |= (0xFF & input[j]);
            }
        }
        NSInteger theIndex = (i / 3) * 4;
        output[theIndex + 0] = table[(value >> 18) & 0x3F];
        output[theIndex + 1] = table[(value >> 12) & 0x3F];
        output[theIndex + 2] = (i + 1) < length ? table[(value >> 6) & 0x3F] : '=';
        output[theIndex + 3] = (i + 2) < length ? table[(value >> 0) & 0x3F] : '=';
    }
    
    return [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];  //返回加密的数据
}

需要引入:
<Foundation/Foundation.h>、<CommonCrypto/CommonHMAC.h>

相关文章

网友评论

      本文标题:封装base64编码工具方法

      本文链接:https://www.haomeiwen.com/subject/duzhkxtx.html