Created
June 15, 2018 15:48
-
-
Save bluemoon2014/34aa1f9b4944adedd711ff190f27a0cc to your computer and use it in GitHub Desktop.
ios aes128
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// ViewController.m | |
// AES加密 | |
// | |
// Created by Ajun on 15/06/2018. | |
// Copyright © 2018 Ajun. All rights reserved. | |
// | |
#import "ViewController.h" | |
#import <CommonCrypto/CommonCrypto.h> | |
@interface ViewController () | |
@end | |
@implementation ViewController | |
- (void)viewDidLoad { | |
[super viewDidLoad]; | |
[ViewController AesEncrypt:@""]; | |
// NSString * j = [ self md5:@"1eVRiqy7b9Uv7ZMM"].copy; | |
// NSLog(@"%@",j); | |
} | |
//AES加密 | |
+(NSString*)AesEncrypt:(NSString*)str{ | |
NSString *originString = @"hello little shell-123456"; | |
const char * cOriginString = [originString cStringUsingEncoding:NSUTF8StringEncoding]; | |
// char cOriginArray[] = cOriginString; | |
NSString*key=@"1eVRiqy7b9Uv7ZMM";//密钥 | |
// NSString*key=@"aabd3d3d7d64dea9";//密钥 | |
NSData*data=[originString dataUsingEncoding:NSUTF8StringEncoding];//待加密字符转为NSData型 | |
char keyPtr[kCCKeySizeAES128+1]; | |
memset(keyPtr,0,sizeof(keyPtr)); | |
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; | |
const char * cKey = [key cStringUsingEncoding:NSUTF8StringEncoding]; | |
// [key getCString:keyPtrmaxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; | |
NSUInteger dataLength = [data length]; | |
// NSUInteger dataLength = sizeof( *cOriginString); | |
size_t bufferSize = dataLength +kCCBlockSizeAES128; | |
void* buffer =malloc(bufferSize); | |
size_t numBytesCrypted =0; | |
CCCryptorStatus status = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCModeECB | kCCOptionPKCS7Padding, keyPtr, kCCBlockSizeAES128, NULL, data.bytes, dataLength, buffer, bufferSize, &numBytesCrypted); | |
// CCCryptorStatuscryptStatus =CCCrypt(kCCEncrypt, // 加密 kCCDecrypt解密 | |
//kCCAlgorithmAES128, //填充方式 | |
// | |
// kCCOptionPKCS7Padding|kCCOptionECBMode, //工作模式 | |
// | |
// keyPtr, //AES的密钥长度有128字节、192字节、256字节几种,这里举出可能存在的最大长度 | |
// | |
// kCCBlockSizeAES128, //密文长度+补位长度 | |
// | |
// nil, //偏移量,由于是对称加密,用不到 | |
// | |
// [databytes], //字节大小 | |
// | |
// dataLength, //字节长度 | |
// | |
// buffer, | |
// | |
// bufferSize, | |
// | |
// &numBytesCrypted); | |
if(status ==kCCSuccess) { | |
// NSData*resultData=[NSData dataWithBytesNoCopy:buffer length :numBytesCrypted]; | |
NSData *resultData = [NSData dataWithBytes:buffer length:numBytesCrypted]; | |
NSLog(@"%@",[ViewController convertDataToHexStr:resultData]); | |
} | |
free(buffer); | |
return nil; | |
} | |
- (NSString *) md5:(NSString *) input { | |
const char *cStr = [input UTF8String]; | |
unsigned char digest[CC_MD5_DIGEST_LENGTH]; | |
CC_MD5( cStr, strlen(cStr), digest ); // This is the md5 call | |
NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2]; | |
for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) | |
[output appendFormat:@"%02x", digest[i]]; | |
return output; | |
} | |
//NSData转换为16进制 | |
+ (NSString*)convertDataToHexStr:(NSData*)data { | |
if (!data || [data length] ==0) { | |
return @""; | |
} | |
NSMutableString *string = [[NSMutableString alloc]initWithCapacity:[data length]/2]; | |
[data enumerateByteRangesUsingBlock:^(const void*bytes,NSRange byteRange,BOOL*stop) { | |
unsigned char *dataBytes = (unsigned char*)bytes; | |
for (NSInteger i =0; i < byteRange.length; i++) { | |
NSString *hexStr = [NSString stringWithFormat:@"%x", (dataBytes[i]) & 0xff]; | |
if ([hexStr length] ==2) { | |
[string appendString:hexStr]; | |
} else { | |
[string appendFormat:@"0%@", hexStr]; | |
} | |
} | |
}]; | |
return string; | |
} | |
- (void)didReceiveMemoryWarning { | |
[super didReceiveMemoryWarning]; | |
// Dispose of any resources that can be recreated. | |
} | |
@end | |
//密文:68f7ec213e13005bd56db544b37cfde0696757b13684fcf5e2f3a720615737a8 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment