直接上源码,如需自取即可:
.h 文件代码如下:
/**
* 加密方法
* @param enctyptString 加密字段
* @param key 秘钥
* @return 加密后base64值
*/
+ (NSString *)ky_encryptWithAES:(NSString *)enctyptString Key:(NSString *)key;
/**
* 解密方法
* @param decryptString 解密字段
* @param key 秘钥
* @return 解密后字符
*/
+ (NSString *)ky_decryptWithAES:(NSString *)decryptString Key:(NSString *)key;
.m 文件代码如下:
#import <CommonCrypto/CommonCryptor.h>
// MARK:加密方法
+ (NSString *)ky_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 *)ky_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;
}
PS:
加密和解密必须是同一个密钥,且密钥的长度无限制。
网友评论