- El cifrado AES se divide en 128 <longitud de clave 16>, 192 <longitud de clave 24>, 256 <longitud de clave 32>, pero el identificador es diferente.
- El cifrado AES es el modo CBC de forma predeterminada. Agregue un logotipo para cambiar al modo ECB.
- El modo ECB no requiere compensación.
- El procesamiento de cadenas es generalmente codificación base64 y el conjunto de caracteres es UTF-8.
- Haga clic en la verificación en línea se realizó correctamente
- El ejemplo de código es el siguiente:
//
// 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