//
// AESEncryptTool.m
// 太公管工
//
// Created by 李松 on 2021/9/11.
// Copyright © 2021 姜太公. All rights reserved.
//
#import "AESEncryptTool.h"
static NSString* const key = @"00000000000000000000000000000000";
static NSString* const iv = @"0000000000000000";
@implementation AESEncryptTool
// MARK: ===============加密===============
+ (NSString *)AES256Encrypt:(NSString *)content Key:(NSString *)key {
if (content.length == 0) {
return @"";
}
NSData *data = [content dataUsingEncoding:NSUTF8StringEncoding];
NSData *resultData = [AESEncryptTool CCCryptWithOptration:kCCEncrypt Data:data Key:key];
return [resultData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];
}
// MARK: ===============解密===============
+ (NSString *)AES256Decrypt:(NSString *)content Key:(NSString *)key {
if (content.length == 0) {
return @"";
}
NSData *data = [[NSData alloc]initWithBase64EncodedString:content options:NSDataBase64DecodingIgnoreUnknownCharacters];
NSData *resultData = [AESEncryptTool CCCryptWithOptration:kCCDecrypt Data:data Key:key];
return [[NSString alloc]initWithData:resultData encoding:NSUTF8StringEncoding];
}
+ (NSData *)CCCryptWithOptration:(CCOperation)operation Data:(NSData *)data Key:(NSString *)key {
char keyPtr[kCCKeySizeAES256 + 1];
bzero(keyPtr, sizeof(keyPtr));
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
// IV
char ivPtr[kCCBlockSizeAES128 + 1];
bzero(ivPtr, sizeof(ivPtr));
NSString *iv = [key substringToIndex:16];
[iv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding];
size_t bufferSize = data.length + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
size_t actualOutSize = 0;
CCCryptorStatus cryptorStatus = CCCrypt(operation, kCCAlgorithmAES128, kCCOptionPKCS7Padding, keyPtr, kCCKeySizeAES256, ivPtr, data.bytes, data.length, buffer, bufferSize, &actualOutSize);
if(cryptorStatus == kCCSuccess){
NSData *data = [NSData dataWithBytesNoCopy:buffer length:actualOutSize];
return data;
}
free(buffer);
return nil;
}
+ (NSString *)AES128Encrypt:(NSString *)content Key:(NSString *)key {
if (content.length == 0) {
return @"";
}
NSData *data = [content dataUsingEncoding:NSUTF8StringEncoding];
NSData *resultData = [AESEncryptTool Aes128CCCryptWithOptration:kCCEncrypt Data:data Key:key];
return [resultData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];
}
+ (NSString *)AES128Decrypt:(NSString *)content Key:(NSString *)key {
if (content.length == 0) {
return @"";
}
NSData *data = [[NSData alloc]initWithBase64EncodedString:content options:NSDataBase64DecodingIgnoreUnknownCharacters];
NSData *resultData = [AESEncryptTool Aes128CCCryptWithOptration:kCCDecrypt Data:data Key:key];
return [[NSString alloc]initWithData:resultData encoding:NSUTF8StringEncoding];
}
+ (NSData *)Aes128CCCryptWithOptration:(CCOperation)operation Data:(NSData *)data Key:(NSString *)key {
char keyPtr[kCCKeySizeAES128 + 1];
memset(keyPtr, 0, sizeof(keyPtr));
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
char ivPtr[kCCBlockSizeAES128 + 1];
memset(ivPtr, 0, sizeof(ivPtr));
[key getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding];
NSUInteger dataLength = [data length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
size_t numBytesCrypted = 0;
CCCryptorStatus cryptStatus;
if (operation == kCCEncrypt) {
int diff = kCCKeySizeAES128 - (dataLength % kCCKeySizeAES128);
NSInteger newSize = 0;
if(diff > 0) {
newSize = dataLength + diff;
}
char dataPtr[newSize];
memcpy(dataPtr, [data bytes], dataLength);
for(int i = 0; i < diff; i++) {
dataPtr[i + dataLength] = 0x00;
}
memset(buffer, 0, bufferSize);
cryptStatus = CCCrypt(operation,
kCCAlgorithmAES128,
0x0000, //No padding
keyPtr,
kCCKeySizeAES128,
ivPtr,
dataPtr,
sizeof(dataPtr),
buffer,
bufferSize,
&numBytesCrypted);
}else {
cryptStatus = CCCrypt(operation,
kCCAlgorithmAES128,
0x0000,
keyPtr,
kCCBlockSizeAES128,
ivPtr,
[data bytes],
dataLength,
buffer,
bufferSize,
&numBytesCrypted);
}
if (cryptStatus == kCCSuccess) {
NSData *resultData = [NSData dataWithBytesNoCopy:buffer length:numBytesCrypted];
return resultData;
}
free(buffer);
return nil;
}
// MARK: ===============加密===============
+ (NSString *)encryptAES:(NSString *)content {
NSData *data = [content dataUsingEncoding:NSUTF8StringEncoding];
return [[AESEncryptTool CCCryptWithOptration:kCCEncrypt Data:data] base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];
}
// MARK: ===============解密===============
+ (NSString *)decryptAES:(NSString *)content {
NSData *data = [[NSData alloc]initWithBase64EncodedString:content options:NSDataBase64DecodingIgnoreUnknownCharacters];
return [[NSString alloc]initWithData:[AESEncryptTool CCCryptWithOptration:kCCDecrypt Data:data] encoding:NSUTF8StringEncoding];
}
+ (NSData *)CCCryptWithOptration:(CCOperation)operation Data:(NSData *)data {
char keyPtr[kCCKeySizeAES256 + 1];
bzero(keyPtr, sizeof(keyPtr));
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
// IV
char ivPtr[kCCBlockSizeAES128 + 1];
bzero(ivPtr, sizeof(ivPtr));
[iv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding];
size_t bufferSize = data.length + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
size_t actualOutSize = 0;
CCCryptorStatus cryptorStatus = CCCrypt(operation, kCCAlgorithmAES128, kCCOptionPKCS7Padding, keyPtr, kCCKeySizeAES256, ivPtr, data.bytes, data.length, buffer, bufferSize, &actualOutSize);
if(cryptorStatus == kCCSuccess){
NSData *data = [NSData dataWithBytesNoCopy:buffer length:actualOutSize];
return data;
}
free(buffer);
return nil;
}
@end
// h文件
//
// AESEncryptTool.h
// 太公管工
//
// Created by 李松 on 2021/9/11.
// Copyright © 2021 姜太公. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <CommonCrypto/CommonCryptor.h>
#import <CommonCrypto/CommonDigest.h>
NS_ASSUME_NONNULL_BEGIN
@interface AESEncryptTool : NSObject
// MARK: ===============加密===============
+ (NSString *)AES256Encrypt:(NSString *)content Key:(NSString *)key;
// MARK: ===============解密===============
+ (NSString *)AES256Decrypt:(NSString *)content Key:(NSString *)key;
// MARK: ===============加密===============
+ (NSString *)AES128Encrypt:(NSString *)content Key:(NSString *)key;
// MARK: ===============解密===============
+ (NSString *)AES128Decrypt:(NSString *)content Key:(NSString *)key;
// MARK: ===============加密===============
+ (NSString *)encryptAES:(NSString *)content;
// MARK: ===============解密===============
+ (NSString *)decryptAES:(NSString *)content;
@end
NS_ASSUME_NONNULL_END
关于IOS 的AES加密
最新推荐文章于 2025-04-22 19:04:01 发布

1万+

被折叠的 条评论
为什么被折叠?



