iOS开发之Objective-c的AES加密和解密算法的实现
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了iOS开发之Objective-c的AES加密和解密算法的实现,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4085字,纯文字阅读大概需要6分钟。
内容图文
原文:http://www.lidaren.com/archives/1470
高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法。 以下实现代码中分别为NSData和NSString增加了一个Category。使用时直接调用即可。
需要注意的是,AES并不能作为HASH算法,加密并解密后的结果,并不一定与原文相同,使用时请注意进行结果验算。例如解密原文的长度,格式规则等。 NG实例
原文:170987350
密码:170
Objective-c的AES加密和解密算法的具体实现代码如下: 1.拓展NSData,增加AES256加密方法
1 // 2 // NSData+AES256.h 3 // 4 5 #import <Foundation/Foundation.h> 6#import <CommonCrypto/CommonDigest.h> 7#import <CommonCrypto/CommonCryptor.h> 8 9@interface NSData(AES256) 10 -(NSData *) aes256_encrypt:(NSString *)key; 11 -(NSData *) aes256_decrypt:(NSString *)key; 12@end 13 14 15// 16//NSData+AES256.m 17// 18#import"NSData+AES256.h" 19 20@implementation NSData(AES256) 21 22 - (NSData *)aes256_encrypt:(NSString *)key //加密 23{ 24char keyPtr[kCCKeySizeAES256+1]; 25 bzero(keyPtr, sizeof(keyPtr)); 26 [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; 27 NSUInteger dataLength = [self length]; 28 size_t bufferSize = dataLength + kCCBlockSizeAES128; 29void *buffer = malloc(bufferSize); 30 size_t numBytesEncrypted = 0; 31 CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, 32 kCCOptionPKCS7Padding | kCCOptionECBMode, 33 keyPtr, kCCBlockSizeAES128, 34 NULL, 35 [self bytes], dataLength, 36 buffer, bufferSize, 37 &numBytesEncrypted); 38if (cryptStatus == kCCSuccess) { 39return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted]; 40 } 41 free(buffer); 42return nil; 43} 44 45 46 - (NSData *)aes256_decrypt:(NSString *)key //解密 47{ 48char keyPtr[kCCKeySizeAES256+1]; 49 bzero(keyPtr, sizeof(keyPtr)); 50 [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; 51 NSUInteger dataLength = [self length]; 52 size_t bufferSize = dataLength + kCCBlockSizeAES128; 53void *buffer = malloc(bufferSize); 54 size_t numBytesDecrypted = 0; 55 CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, 56 kCCOptionPKCS7Padding | kCCOptionECBMode, 57 keyPtr, kCCBlockSizeAES128, 58 NULL, 59 [self bytes], dataLength, 60 buffer, bufferSize, 61 &numBytesDecrypted); 62if (cryptStatus == kCCSuccess) { 63return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted]; 64 65 } 66 free(buffer); 67return nil; 68} 69@end 702.拓展NSString,增加AES256加密方法,需要导入NSData+AES256.h 71 72 73// 74//NSString +AES256.h 75// 76 77#import <Foundation/Foundation.h> 78#import <CommonCrypto/CommonDigest.h> 79#import <CommonCrypto/CommonCryptor.h> 80 81#import"NSData+AES256.h" 82 83@interface NSString(AES256) 84 85 -(NSString *) aes256_encrypt:(NSString *)key; 86 -(NSString *) aes256_decrypt:(NSString *)key; 87 88@end 89 90 91// 92//NSString +AES256.h 93// 94 95@implementation NSString(AES256) 96 97 -(NSString *) aes256_encrypt:(NSString *)key 98{ 99constchar *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding]; 100 NSData *data = [NSData dataWithBytes:cstr length:self.length]; 101//对数据进行加密102 NSData *result = [data aes256_encrypt:key]; 103104//转换为2进制字符串105if (result && result.length > 0) { 106107 Byte *datas = (Byte*)[result bytes]; 108 NSMutableString *output = [NSMutableString stringWithCapacity:result.length * 2]; 109for(int i = 0; i < result.length; i++){ 110 [output appendFormat:@"%02x", datas[i]]; 111 } 112return output; 113 } 114return nil; 115} 116117 -(NSString *) aes256_decrypt:(NSString *)key 118{ 119//转换为2进制Data120 NSMutableData *data = [NSMutableData dataWithCapacity:self.length / 2]; 121 unsigned char whole_byte; 122char byte_chars[3] = {‘\0‘,‘\0‘,‘\0‘}; 123int i; 124for (i=0; i < [self length] / 2; i++) { 125 byte_chars[0] = [self characterAtIndex:i*2]; 126 byte_chars[1] = [self characterAtIndex:i*2+1]; 127 whole_byte = strtol(byte_chars, NULL, 16); 128 [data appendBytes:&whole_byte length:1]; 129 } 130131//对数据进行解密132 NSData* result = [data aes256_decrypt:key]; 133if (result && result.length > 0) { 134return [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding]; 135 } 136return nil; 137} 138@end
原文:http://www.cnblogs.com/qq744890760/p/5072220.html
内容总结
以上是互联网集市为您收集整理的iOS开发之Objective-c的AES加密和解密算法的实现全部内容,希望文章能够帮你解决iOS开发之Objective-c的AES加密和解密算法的实现所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。