Skip to content

Instantly share code, notes, and snippets.

@bluemoon2014
Created June 15, 2018 15:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bluemoon2014/34aa1f9b4944adedd711ff190f27a0cc to your computer and use it in GitHub Desktop.
Save bluemoon2014/34aa1f9b4944adedd711ff190f27a0cc to your computer and use it in GitHub Desktop.
ios aes128
//
// 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