iPhone程序中的加密处理
生活随笔
收集整理的這篇文章主要介紹了
iPhone程序中的加密处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本文轉載至?http://blog.csdn.net/zaitianaoxiang/article/details/6650478
- 原文鏈接?:?http://www.yifeiyang.net/iphone-development-techniques-of-data-papers-2-iphone-encryption-program/
- CCCryptbase64encoding
iPhone開發技巧之數據篇(2)—iPhone程序中的加密處理
CCCrypt
在Objective-C語言中,加密時常用到CCCrypt(3cc)Mac OS X Manual Page。下面的代碼使用 CCCrypt() ,給 NSData 類增加了AES256EncryptWithKey, AES256DecryptWithKey 方法.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 #import <CommonCrypto/CommonCryptor.h>@implementation NSData (Additions)@class NSString;- (NSData *)AES256EncryptWithKey:(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 *)AES256DecryptWithKey:(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 ? 使用的時候就像使用NSData一樣。
base64encoding
有的時候需要向服務器上傳遞base64加密的數據,這個時候我們就可以像下面,給 NSData類追加newStringInBase64FromData 方法。
123456789101112131415161718192021 - (NSString *)newStringInBase64FromData {NSMutableString *dest = [[NSMutableString alloc] initWithString:@""];unsigned char * working = (unsigned char *)[self bytes];int srcLen = [self length];for (int i=0; i<srcLen; i += 3) {for (int nib=0; nib<4; nib++) {int byt = (nib == 0)?0:nib-1;int ix = (nib+1)*2;if (i+byt >= srcLen) break;unsigned char curr = ((working[i+byt] << (8-ix)) & 0x3F);if (i+nib < srcLen) curr |= ((working[i+nib] >> ix) & 0x3F);[dest appendFormat:@"%c", base64[curr]];}}return dest;} ? 同樣,使用的時候就像使用NSData一樣。
最終的代碼如下所示 :
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 //// NSDataAdditions.h//// Copyright 2010 __MyCompanyName__. All rights reserved.//#import <Foundation/Foundation.h>@class NSString;@interface NSData (Additions)- (NSData *)AES256EncryptWithKey:(NSString *)key;- (NSData *)AES256DecryptWithKey:(NSString *)key;- (NSString *)newStringInBase64FromData;@end// -----------------------------------------------------------------------------------//// NSDataAdditions.m//// Copyright 2010 __MyCompanyName__. All rights reserved.//#import "NSDataAdditions.h" #import <CommonCrypto/CommonCryptor.h>static char base64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";@implementation NSData (Additions)@class NSString;- (NSData *)AES256EncryptWithKey:(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 *)AES256DecryptWithKey:(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;}- (NSString *)newStringInBase64FromData {NSMutableString *dest = [[NSMutableString alloc] initWithString:@""];unsigned char * working = (unsigned char *)[self bytes];int srcLen = [self length];for (int i=0; i<srcLen; i += 3) {for (int nib=0; nib<4; nib++) {int byt = (nib == 0)?0:nib-1;int ix = (nib+1)*2;if (i+byt >= srcLen) break;unsigned char curr = ((working[i+byt] << (8-ix)) & 0x3F);if (i+nib < srcLen) curr |= ((working[i+nib] >> ix) & 0x3F);[dest appendFormat:@"%c", base64[curr]];}}return dest;}@end
轉載于:https://www.cnblogs.com/Camier-myNiuer/p/3601807.html
總結
以上是生活随笔為你收集整理的iPhone程序中的加密处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: autocad.net中判断当前被激活的
- 下一篇: 常用webshell提权方法总结