AES加密

////  AESEncrypt.h//  AESDemo////  Created by zhangshuai on 17/4/8.//  Copyright © 2017年 zhangshuai. All rights reserved.//#import@interface AESEncrypt : NSObject

+(NSData *)AES256ParmEncryptWithKey:(NSString *)key Encrypttext:(NSData *)text;  //加密

+(NSData *)AES256ParmDecryptWithKey:(NSString *)key Decrypttext:(NSData *)text;  //解密

+(NSString *) aes256_encrypt:(NSString *)key Encrypttext:(NSString *)text;

+(NSString *) aes256_decrypt:(NSString *)key Decrypttext:(NSString *)text;

@end


/*********************************************************/

////  AESEncrypt.m//  AESDemo////  Created by zhangshuai on 17/4/8.//  Copyright © 2017年 zhangshuai. All rights reserved.//#import "AESEncrypt.h"#import@implementation AESEncrypt

+(NSData *)AES256ParmEncryptWithKey:(NSString *)key Encrypttext:(NSData *)text  //加密

{

char keyPtr[kCCKeySizeAES256+1];

bzero(keyPtr, sizeof(keyPtr));

[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];

NSUInteger dataLength = [text length];

size_t bufferSize = dataLength + kCCBlockSizeAES128;

void *buffer = malloc(bufferSize);

size_t numBytesEncrypted = 0;

CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128,

kCCOptionPKCS7Padding | kCCOptionECBMode,

keyPtr, kCCBlockSizeAES128,

NULL,

[text bytes], dataLength,

buffer, bufferSize,

&numBytesEncrypted);

if (cryptStatus == kCCSuccess) {

return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];

}

free(buffer);

return nil;

}

+ (NSData *)AES256ParmDecryptWithKey:(NSString *)key Decrypttext:(NSData *)text  //解密

{

char keyPtr[kCCKeySizeAES256+1];

bzero(keyPtr, sizeof(keyPtr));

[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];

NSUInteger dataLength = [text length];

size_t bufferSize = dataLength + kCCBlockSizeAES128;

void *buffer = malloc(bufferSize);

size_t numBytesDecrypted = 0;

CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128,

kCCOptionPKCS7Padding | kCCOptionECBMode,

keyPtr, kCCBlockSizeAES128,

NULL,

[text bytes], dataLength,

buffer, bufferSize,

&numBytesDecrypted);

if (cryptStatus == kCCSuccess) {

return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];

}

free(buffer);

return nil;

}

+(NSString *) aes256_encrypt:(NSString *)key Encrypttext:(NSString *)text

{

const char *cstr = [text cStringUsingEncoding:NSUTF8StringEncoding];

NSData *data = [NSData dataWithBytes:cstr length:text.length];

//对数据进行加密

NSData *result = [AESEncrypt AES256ParmEncryptWithKey:key Encrypttext:data];

//转换为2进制字符串

if (result && result.length > 0) {

Byte *datas = (Byte*)[result bytes];

NSMutableString *output = [NSMutableString stringWithCapacity:result.length * 2];

for(int i = 0; i < result.length; i++){

[output appendFormat:@"%02x", datas[i]];

}

return output;

}

return nil;

}

+(NSString *) aes256_decrypt:(NSString *)key Decrypttext:(NSString *)text

{

//转换为2进制Data

NSMutableData *data = [NSMutableData dataWithCapacity:text.length / 2];

unsigned char whole_byte;

char byte_chars[3] = {'\0','\0','\0'};

int i;

for (i=0; i < [text length] / 2; i++) {

byte_chars[0] = [text characterAtIndex:i*2];

byte_chars[1] = [text characterAtIndex:i*2+1];

whole_byte = strtol(byte_chars, NULL, 16);

[data appendBytes:&whole_byte length:1];

}

//对数据进行解密

NSData* result = [AESEncrypt  AES256ParmDecryptWithKey:key Decrypttext:data];

if (result && result.length > 0) {

return [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding];

}

return nil;

}

@end



/*********************************************************/


//  ViewController.m

//  AESDemo

//

//  Created by zhangshuai on 17/4/8.

//  Copyright © 2017年 zhangshuai. All rights reserved.

//

#import "ViewController.h"

#import "AESEncrypt.h"

#define Key @"passwordKey"

#define passeordString @"zhangshuai"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

/***********************第一种***********************************/

NSData *tempData = [passeordString dataUsingEncoding:NSUTF8StringEncoding];

NSData *beforeData = [AESEncrypt AES256ParmEncryptWithKey:Key Encrypttext:tempData];

NSData *afterData = [AESEncrypt AES256ParmDecryptWithKey:Key Decrypttext:beforeData];

NSString *afterStr = [[NSString alloc]initWithData:afterData encoding:NSUTF8StringEncoding];;

NSLog(@"字符串的加密前的data%@",beforeData);

NSLog(@"字符串的加密后的data%@",afterData);

NSLog(@"解密后的字符串%@",afterStr);

/************************第二种********************************/

NSLog(@"********************************************************");

NSString *cc =[AESEncrypt aes256_encrypt:Key Encrypttext:passeordString];

NSString *bb = [AESEncrypt aes256_decrypt:Key Decrypttext:cc];

NSLog(@"加密后的字符串 %@",cc);

NSLog(@"解密后的字符串 %@",bb);

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

@end

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • /**ios常见的几种加密方法: 普通的加密方法是讲密码进行加密后保存到用户偏好设置( [NSUserDefaul...
    彬至睢阳阅读 8,196评论 0 7
  • AES加密 之前公司项目有需要用到这个加密,但是由于网络上找到的都是没有设置向量的,所以后来进行整理之后,自己写了...
    宁小缺阅读 8,599评论 9 3
  • DEMO 综述: 一行代码完成AES加密,加密模式 AES128 + ECB + NoPadding DEMO下载...
    iccpeng阅读 12,765评论 26 59
  • 1 先解释下“伪音”是什么。 从字面上来理解就是“假冒的声音”,意思就是伪装成别的声音,这就是伪声。 简单说,就是...
    陈小藤阅读 14,760评论 4 25
  • 宝贝正式来到了我身边,刚出生的宝宝混身通红,头发稀疏,还看不出来长得像谁。:) 头几天真是手忙脚乱的,小家伙的诞生...
    运营小白书阅读 1,950评论 0 1

友情链接更多精彩内容