iOS開發之Objective-c的AES加密和解密演算法的實現

來源:互聯網
上載者:User

標籤:

進階加密標準(Advanced Encryption Standard,AES),又稱Rijndael加密法。 以下實現代碼中分別為NSData和NSString增加了一個Category。使用時直接調用即可。 

需要注意的是,AES並不能作為HASH演算法,加密並解密後的結果,並不一定與原文相同,使用時請注意進行結果驗算。例如解密原文的長度,格式規則等。 NG執行個體 

原文:170987350密碼:170

Objective-c的AES加密和解密演算法的具體實現代碼如下: 1.拓展NSData,增加AES256加密方法 

 
////NSData+AES256.h// #import <Foundation/Foundation.h>#import <CommonCrypto/CommonDigest.h>#import <CommonCrypto/CommonCryptor.h> @interface NSData(AES256)-(NSData *) aes256_encrypt:(NSString *)key;-(NSData *) aes256_decrypt:(NSString *)key;@end  ////NSData+AES256.m//#import "NSData+AES256.h" @implementation NSData(AES256) - (NSData *)aes256_encrypt:(NSString *)key   //加密{  char keyPtr[kCCKeySizeAES256+1];  bzero(keyPtr, sizeof(keyPtr));  [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 | kCCOptionECBMode,                      keyPtr, kCCBlockSizeAES128,                      NULL,                      [self bytes], dataLength,                      buffer, bufferSize,                      &numBytesEncrypted);  if (cryptStatus == kCCSuccess) {    return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];  }  free(buffer);  return nil;}  - (NSData *)aes256_decrypt:(NSString *)key   //解密{  char keyPtr[kCCKeySizeAES256+1];  bzero(keyPtr, sizeof(keyPtr));  [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 | kCCOptionECBMode,                      keyPtr, kCCBlockSizeAES128,                      NULL,                      [self bytes], dataLength,                      buffer, bufferSize,                      &numBytesDecrypted);  if (cryptStatus == kCCSuccess) {    return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];   }  free(buffer);  return nil;}@end

2.拓展NSString,增加AES256加密方法,需要匯入NSData+AES256.h

 
 ////NSString +AES256.h// #import <Foundation/Foundation.h>#import <CommonCrypto/CommonDigest.h>#import <CommonCrypto/CommonCryptor.h> #import "NSData+AES256.h" @interface NSString(AES256) -(NSString *) aes256_encrypt:(NSString *)key;-(NSString *) aes256_decrypt:(NSString *)key; @end  ////NSString +AES256.h// @implementation NSString(AES256) -(NSString *) aes256_encrypt:(NSString *)key{  const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];  NSData *data = [NSData dataWithBytes:cstr length:self.length];  //對資料進行加密  NSData *result = [data aes256_encrypt:key];   //轉換為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{     //轉換為2進位Data  NSMutableData *data = [NSMutableData dataWithCapacity:self.length / 2];  unsigned char whole_byte;  char byte_chars[3] = {‘\0‘,‘\0‘,‘\0‘};  int i;  for (i=0; i < [self length] / 2; i++) {    byte_chars[0] = [self characterAtIndex:i*2];    byte_chars[1] = [self characterAtIndex:i*2+1];    whole_byte = strtol(byte_chars, NULL, 16);    [data appendBytes:&whole_byte length:1];  }   //對資料進行解密  NSData* result = [data aes256_decrypt:key];  if (result && result.length > 0) {    return [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding]autorelease];  }  return nil;}@end
 

iOS開發之Objective-c的AES加密和解密演算法的實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.