- AES加密分为128<秘钥长度16>、192<秘钥长度24>、256<秘钥长度32>,只是标识符的不同而已。
- AES加密默认为CBC模式,添加一个标识即可变为ECB模式。
- ECB模式不需要偏移量。
- 字符串处理一般为base64编码,字符集为UTF-8。
- 点击在线验证是否成功
- 代码示例如下:
//
// AESTool.h
//
// Created by 王盛魁 on 2020/4/3.
// Copyright © 2020 王盛魁. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface AESTool : NSObject
/**
* 加密方法
* @param enctyptString 加密字段
* @param key 秘钥
* @return 加密后base64值
*/
+ (NSString *)ccic_encryptWithAES:(NSString *)enctyptString Key:(NSString *)key;
/**
* 解密方法
* @param decryptString 解密字段
* @param key 秘钥
* @return 解密后字符
*/
+ (NSString *)ccic_decryptWithAES:(NSString *)decryptString Key:(NSString *)key;
@end
NS_ASSUME_NONNULL_END
//
// AESTool.m
//
// Created by 王盛魁 on 2020/4/3.
// Copyright © 2020 王盛魁. All rights reserved.
//
#import "AESTool.h"
#import <CommonCrypto/CommonDigest.h>
#import <CommonCrypto/CommonCryptor.h>
@implementation AESTool
// MARK:加密方法
+ (NSString *)ccic_encryptWithAES:(NSString *)enctyptString Key:(NSString *)key{
NSData *contentData = [enctyptString dataUsingEncoding:NSUTF8StringEncoding];
NSData *encrptData = [self AES128operation:kCCEncrypt data:contentData key:key];
return [encrptData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];
}
// MARK:解密方法
+ (NSString *)ccic_decryptWithAES:(NSString *)decryptString Key:(NSString *)key{
NSData *contentData = [[NSData alloc] initWithBase64EncodedString:decryptString options:NSDataBase64DecodingIgnoreUnknownCharacters];
NSData *decryptedData = [self AES128operation:kCCDecrypt data:contentData key:key];
return [[NSString alloc] initWithData:decryptedData encoding:NSUTF8StringEncoding];
}
//MARK:AES128/ECB模式
/**
* AES128加解密算法
* @param operation kCCEncrypt(加密)kCCDecrypt(解密)
* @param data 待操作Data数据
* @param key key
*/
+ (NSData *)AES128operation:(CCOperation)operation data:(NSData *)data key:(NSString *)key{
char keyPtr[kCCKeySizeAES128 + 1]; //kCCKeySizeAES128是加密位数 可以替换成256位的
bzero(keyPtr, sizeof(keyPtr));
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
size_t bufferSize = [data length] + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
size_t numBytesEncrypted = 0;
/**
*这里设置的参数ios默认为CBC加密方式,
*如果需要其他加密方式如ECB,在kCCOptionPKCS7Padding这个参数后边加上kCCOptionECBMode
*即kCCOptionPKCS7Padding | kCCOptionECBMode。
*但是记得修改上边的偏移量,因为只有CBC模式有偏移量之说
*/
CCCryptorStatus cryptorStatus = CCCrypt(operation, kCCAlgorithmAES128,
kCCOptionPKCS7Padding | kCCOptionECBMode,
keyPtr, kCCKeySizeAES128,
NULL,
[data bytes], [data length],
buffer, bufferSize,
&numBytesEncrypted);
if(cryptorStatus == kCCSuccess) {
NSLog(@"Success");
return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
} else {
NSLog(@"Error");
}
free(buffer);
return nil;
}
@end