花了近7個工作天的時數才完成......
加密中需要的base64是採用 QSUtilities 可以在 https://github.com/mikeho/QSUtilities 取得
MD5 可以參考 http://www.makebetterthings.com/iphone/how-to-get-md5-and-sha1-in-objective-c-ios-sdk/
Use ARC
AzDG.h
#importAzDG.m@interface AzDG : NSObject { } -(id) initWithCipher : (NSString*) input; -(NSString*) getCipher; -(NSData*) cipherCrypt:(NSData*) inputData; -(NSString*) encode:(NSString*) input; -(NSString*) decode:(NSString*) input; @end
#import "AzDG.h" #import "MD5.h" #import "QSStrings.h" @implementation AzDG NSString* cipher = @"1234567890"; -(id) initWithCipher : (NSString*) input { self = [super init]; if (self != nil && input != nil && [input length] > 0) { cipher = input; } return self; } -(NSString*) getCipher{ return cipher; } -(NSData*) cipherCrypt:(NSData*) inputData { NSMutableData *outData = [[NSMutableData alloc]init]; int loopCount = [inputData length]; const unsigned char * inputChar = [inputData bytes]; const unsigned char *cipherHash = [[[MD5 encode: [self getCipher]] dataUsingEncoding:NSASCIIStringEncoding] bytes]; int i = 0; while (i < loopCount) { Byte b = (Byte)( inputChar[i] ^ cipherHash[i%32]); [outData appendBytes:&b length:sizeof(char)]; i++; } return outData; } -(NSString*) encode:(NSString*) input { NSData *inputData = [input dataUsingEncoding:NSUTF8StringEncoding]; NSMutableData *outData = [[NSMutableData alloc]init]; int loopCount = [inputData length]; const unsigned char *inputChar = [inputData bytes]; const unsigned char *noiseChar = [[[MD5 encode:[NSString stringWithFormat:@"%@",[NSDate date]]] dataUsingEncoding:NSASCIIStringEncoding] bytes]; int i = 0; while (i < loopCount) { [outData appendBytes:&noiseChar[i%32] length:sizeof(char)]; Byte b = (Byte)(inputChar[i] ^ noiseChar[i%32]); [outData appendBytes:&b length:sizeof(char)]; i++; } return [QSStrings encodeBase64WithData:[self cipherCrypt:outData]]; } -(NSString*) decode:(NSString*) input { NSData* inputData = [self cipherCrypt:[QSStrings decodeBase64WithString:input]]; NSMutableData *outData = [[NSMutableData alloc] init]; int loopCount = [inputData length]; const unsigned char * inputChar = [inputData bytes]; int i = 0; while (i < loopCount) { Byte b = (Byte)( inputChar[i] ^ inputChar[i+1]); [outData appendBytes:&b length:sizeof(char)]; i = i + 2; } return [[NSString alloc] initWithData:outData encoding:NSUTF8StringEncoding]; } @end
沒有留言:
張貼留言