iOS AES加密

AES加密是对称加密的一种,全称是Advanced Encryption Standard(高级加密标准)。常用于网络传输中的数据加解密。

图片.png
//
//  NSData+AESEncryption.h
//  ownloadData
//
//  Created by CZ on 2023/7/25.
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface NSData (AESEncryption)

- (NSData *)AES128ParmEncryptWithKey:(NSString *)key iv:(NSString *)iv;
- (NSData *)AES128ParmDecryptWithKey:(NSString *)key iv:(NSString *)iv;

@end

NS_ASSUME_NONNULL_END

//
//  NSData+AESEncryption.m
//  ownloadData
//
//  Created by 陈镇 on 2023/7/25.
//

#import <CommonCrypto/CommonCryptor.h>
#import "NSData+AESEncryption.h"

@implementation NSData (AESEncryption)
- (NSData *)AES128ParmEncryptWithKey:(NSString *)key iv:(NSString *)iv
{
    char keyPtr[kCCKeySizeAES128+1];
    bzero(keyPtr, sizeof(keyPtr));
    [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
    
    char ivPtr[kCCBlockSizeAES128 + 1];
    bzero(ivPtr, sizeof(ivPtr));
    [iv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding];

    
    NSUInteger dataLength = [self length];
    size_t bufferSize = dataLength + kCCKeySizeAES128;
    void *buffer = malloc(bufferSize);
    size_t numBytesEncrypted = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES,
                                          kCCOptionPKCS7Padding,
                                          keyPtr, kCCKeySizeAES128,
                                          ivPtr,
                                          [self bytes], dataLength,
                                          buffer, bufferSize,
                                          &numBytesEncrypted);
    if (cryptStatus == kCCSuccess) {
        return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
    }
    free(buffer);
    return nil;
}
//解密
- (NSData *)AES128ParmDecryptWithKey:(NSString *)key iv:(NSString *)iv
{
    char keyPtr[kCCKeySizeAES128 + 1];
    bzero(keyPtr, sizeof(keyPtr));
    [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
    
    char ivPtr[kCCBlockSizeAES128 + 1];
    bzero(ivPtr, sizeof(ivPtr));
    [iv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding];
    
    NSUInteger dataLength = [self length];
    size_t bufferSize = dataLength + kCCKeySizeAES128;
    void *buffer = malloc(bufferSize);
    size_t numBytesDecrypted = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
                                          kCCAlgorithmAES,
                                          kCCOptionPKCS7Padding,
                                          keyPtr,
                                          kCCKeySizeAES128,
                                          ivPtr,
                                          [self bytes], dataLength,
                                          buffer, bufferSize,
                                          &numBytesDecrypted);
    if (cryptStatus == kCCSuccess) {
        NSData *t = [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];        
        return t;
    }
    free(buffer);
    return nil;
}
@end

使用


    //base64字符串转data (text是待解析的base64字符串)
    NSData *data = [[NSData alloc] initWithBase64EncodedString:text options:NSDataBase64DecodingIgnoreUnknownCharacters];
    //aes解析
    NSData *tttt = [data AES128ParmDecryptWithKey:key iv:iv];

    //解析结果
    NSString *str = [[NSString alloc] initWithData:tttt encoding:NSUTF8StringEncoding];
    RTLog(@"---- %@",str);

参考文档
参考文档2

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,975评论 2 59
  • DEMO 综述: 一行代码完成AES加密,加密模式 AES128 + ECB + NoPadding DEMO下载...
    iccpeng阅读 8,638评论 26 59
  • 前言 1. 介绍1.1 AES是什么?1.2 AES详解1.3 实现原理和比较1.4 模式和填充选择 2. 经验...
    LuckyCat_A阅读 11,198评论 6 21
  • 前言 本文主要是对iOS各种IM实现方案调研 并且提供一些选型、实现细节以及优化的建议。 注:文中的所有的代码示例...
    LWide阅读 5,135评论 2 36
  • 前言 本文会用实例的方式,将iOS各种IM的方案都简单的实现一遍。并且提供一些选型、实现细节以及优化的建议。 注:...
    Sky109阅读 17,002评论 4 117