您的位置:首页 > 其它

AES加密解密

2016-01-05 00:00 225 查看
摘要: 新建工程 OS X Command Line Tool 继承NSObject的工程 引入.h .m 或者创建.h.m写下面的代码 引入框架

//
// main.m
// AES加密
//
// Created by dc008 on 16/1/5.
// Copyright © 2016年 lin. All rights reserved.
//
// AES和MD5相对比base64安全性更高
#import <Foundation/Foundation.h>
#import "NSData+AES.h"
int main() {

NSString *key = @"99";//钥匙
NSString *secret = @"加密内容";//准备加密的内容

//加密- (NSData *)AES256EncryptWithKey:(NSString *)key
NSData *plain = [secret dataUsingEncoding:NSUTF8StringEncoding];
NSData *cipher = [plain AES256EncryptWithKey:key];
NSLog(@"加密后:%@",cipher);

NSString *result = [[NSString alloc]initWithData:cipher encoding:NSUTF8StringEncoding];
NSLog(@"[[[[[%@",result);

//解密- (NSData *)AES256DecryptWithKey:(NSString *)key
for (int i = 1; i <= 100; i++) {
plain = [cipher AES256DecryptWithKey:[NSString stringWithFormat:@"%d",i]];
result = [[NSString alloc]initWithData:plain encoding:NSUTF8StringEncoding];
if (result != NULL) {
NSLog(@"%d",i);
NSLog(@"解密后: %@",result);
}

}
// plain = [cipher AES256DecryptWithKey:key];
// result = [[NSString alloc]initWithData:plain encoding:NSUTF8StringEncoding];
// NSLog(@"解密后: %@",result);
return 0;
}

//
// NSData+AES.h
// oc aes
//
// Created by 朱毅成 on 16/1/4.
// Copyright © 2016年 朱毅成. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface NSData(AES)

- (NSData *)AES256EncryptWithKey:(NSString *)key; //加密
- (NSData *)AES256DecryptWithKey:(NSString *)key; //解密

@end

//
// NSData+AES.m
// oc aes
//
// Created by 朱毅成 on 16/1/4.
// Copyright © 2016年 朱毅成. All rights reserved.
//

#import "NSData+AES.h"
#import <CommonCrypto/CommonCryptor.h>

@implementation NSData(AES)

- (NSData*)AES256EncryptWithKey:(NSString*)key {

char keyPtr[kCCKeySizeAES256 + 1]; // room for terminator (unused)
bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)

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

NSUInteger dataLength = [self length];

size_t bufferSize = dataLength + kCCBlockSizeAES128;
void* buffer = malloc(bufferSize);

size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
keyPtr, kCCKeySizeAES256,
NULL /* initialization vector (optional) */,
[self bytes], dataLength, /* input */
buffer, bufferSize, /* output */
&numBytesEncrypted);

if (cryptStatus == kCCSuccess) {
return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
}

free(buffer);
return nil;
}

- (NSData*)AES256DecryptWithKey:(NSString*)key {

char keyPtr[kCCKeySizeAES256 + 1]; // room for terminator (unused)
bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)

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

NSUInteger dataLength = [self length];

size_t bufferSize = dataLength + kCCBlockSizeAES128;
void* buffer = malloc(bufferSize);

size_t numBytesDecrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
keyPtr, kCCKeySizeAES256,
NULL /* initialization vector (optional) */,
[self bytes], dataLength, /* input */
buffer, bufferSize, /* output */
&numBytesDecrypted);

if (cryptStatus == kCCSuccess) {
return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
}

free(buffer); //free the buffer;
return nil;
}
@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: