Objective-C AES 加解密

iOS AES加解密

hexToByte

{
    NSData* hexToBytes(NSString *hex) {
    NSMutableData* data = [NSMutableData data];
    unsigned int idx, intValue;
    for (idx = 0; idx+2 <= hex.length; idx+=2) {
        NSString* hexStr = [hex substringWithRange:NSMakeRange(idx, 2)];
        NSScanner* scanner = [NSScanner scannerWithString:hexStr];
        [scanner scanHexInt:&intValue];
        [data appendBytes:&intValue length:1];
    }
    return data;
}

parseByteToHexString

NSString *parseByte2HexString(NSData *dt){
    const unsigned char *dataBuffer = (const unsigned char *)[dt bytes];

    if (!dataBuffer){
        return @"";
    }

    NSUInteger dataLength = [dt length];
    NSMutableString *hexString = [NSMutableString stringWithCapacity:(dataLength * 2)];

    for (int i = 0; i < dataLength; ++i){
        [hexString appendFormat:@"%02x", (unsigned int)dataBuffer[i]];
    }
    DLog(@"hexString==%@",hexString);
    return hexString;
}

md5

NSString *md5(NSString *str){
    const char *cStr = [str UTF8String];
    unsigned char digest[CC_MD5_DIGEST_LENGTH];
    CC_MD5( cStr, (uint32_t)strlen(cStr), digest );
    NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
    
    for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
        [output appendFormat:@"%02x", digest[i]];
    
    return output;
}
}

AESEncrypt

+(NSString *)AESEncrypt:(NSString *)str key:(NSString *)enKey{
    
    NSString *md5Str = md5(enKey);
    NSData *key = hexToBytes(md5Str);
    NSData *content = [str dataUsingEncoding:NSUTF8StringEncoding];
    
    size_t bufferSize = content.length + kCCBlockSizeAES128;
    void *buffer = malloc( bufferSize );
    size_t numBytesEncrypted = 0;
    
    CCCryptorStatus result;
    result = CCCrypt(kCCEncrypt, kCCAlgorithmAES128,
                     kCCOptionECBMode | kCCOptionPKCS7Padding,
                     key.bytes, key.length,NULL,
                     content.bytes, content.length,
                     buffer, bufferSize,
                     &numBytesEncrypted);
    if(result == kCCSuccess){
        NSData *data = [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
        NSString *encStr = parseByte2HexString(data);
        return encStr;
    }
    return @"";
}

AESDecrypt

+(NSString *)AESDecrypt:(NSString *)str key:(NSString *)deKey{
    NSString *md5Str = md5(deKey);
    NSData *key = hexToBytes(md5Str);
    NSData *content = hexToBytes(str);
    
    size_t bufferSize = content.length + kCCBlockSizeAES128;
    void *buffer = malloc( bufferSize );
    size_t numBytesEncrypted = 0;
    
    CCCryptorStatus result;
    result = CCCrypt(kCCDecrypt, kCCAlgorithmAES128,
                     kCCOptionECBMode | kCCOptionPKCS7Padding,
                     key.bytes, key.length,NULL,
                     content.bytes, content.length,
                     buffer, bufferSize,
                     &numBytesEncrypted);
    if(result == kCCSuccess){
        NSData *data = [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
        NSString *encStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];//parseByte2HexString(data);
        return encStr;
    }
    return @"";
}

截图


版权所有,转载请注明出处 谢谢!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 179,716评论 25 708
  • 中秋节,我提着大包小箱的礼物来到奶奶家。今年92岁高龄的奶奶,一直是我的掌上明珠。从小特别护着我,偷偷藏好吃的给我...
    AbbyLiLi阅读 677评论 0 1
  • 做全职到今天刚好一年零两个月,两年前的今天,根本不会想到自己一年后会离开工作了20年的银行,成为一个说起来曾...
    雨雪霏_cd阅读 267评论 1 0
  • 其实根本不会写东西,上了大学就没写过文章,空间里都懒得写日志,觉得那样很矫情,最近开始觉得没有东西可看,每天就是刷...
  • 在阴雨天 去攀登一座无名的山 云层将茶山缠绕 我只爬到山腰去仰望不在向前 与不知名的野花同坐在岩石上 深情的看着茶...
    丿肆悦阅读 262评论 4 3

友情链接更多精彩内容