EncryptTool

来源:互联网 发布:淘宝笔记本电脑靠谱吗 编辑:程序博客网 时间:2024/06/06 01:06

EncryptTool.h

////  Des.h//  HungryBear////  Created by Bruce Yang on 12-5-26.//  Copyright (c) 2012年 EricGameStudio. All rights reserved.//#import <Foundation/Foundation.h>#import <CommonCrypto/CommonCryptor.h>#import "GTMBase64.h"@interface EncryptTool : NSObject {    }+(EncryptTool*) et;+(NSString*) parseByte2HexString:(Byte*)bytes;+(NSString*) parseByteArray2HexString:(Byte[])bytes;-(id) init;-(NSString*) encryptUseDES:(NSString*)plainText key:(NSString*)key;-(NSString*) decryptUseDES:(NSString*)cipherText key:(NSString*)key;@end

EncryptTool.mm

////  Des.mm//  HungryBear////  Created by Bruce Yang on 12-5-26.//  Copyright (c) 2012年 EricGameStudio. All rights reserved.//#import "EncryptTool.h"@implementation EncryptToolstatic Byte _iv_[] = {1, 2, 3, 4, 5, 6, 7, 8};+(EncryptTool*) et {    return [[[self alloc] init] autorelease];}+(NSString*) parseByte2HexString:(Byte*) bytes {    NSMutableString *hexStr = [[NSMutableString alloc]init];    int i = 0;    if(bytes) {        while (bytes[i] != '\0') {            NSString *hexByte = [NSString stringWithFormat:@"%x",bytes[i] & 0xff];///16进制数            if([hexByte length]==1) {                [hexStr appendFormat:@"0%@", hexByte];            } else {                [hexStr appendFormat:@"%@", hexByte];            }            i ++;        }    }    NSLog(@"bytes 的16进制数为:%@",hexStr);    return hexStr;}+(NSString*) parseByteArray2HexString:(Byte[]) bytes {    NSMutableString *hexStr = [[NSMutableString alloc]init];    int i = 0;    if(bytes) {        while (bytes[i] != '\0') {            NSString *hexByte = [NSString stringWithFormat:@"%x",bytes[i] & 0xff];///16进制数            if([hexByte length]==1) {                [hexStr appendFormat:@"0%@", hexByte];            } else {                [hexStr appendFormat:@"%@", hexByte];            }            i ++;        }    }    NSLog(@"bytes 的16进制数为:%@",hexStr);    return hexStr;}-(id) init {    if((self = [super init])) {            }    return self;}-(NSString*) encryptUseDES:(NSString*)plainText key:(NSString*)key {    const char* textBytes = [plainText UTF8String];    NSUInteger dataLength = [plainText length];    unsigned char buffer[1024];    memset(buffer, 0, sizeof(char));    size_t numBytesEncrypted = 0;    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,                                           kCCAlgorithmDES,                                           kCCOptionPKCS7Padding,                                           [key UTF8String],                                           kCCKeySizeDES,                                           _iv_,                                           textBytes,                                           dataLength,                                           buffer,                                           1024,                                           &numBytesEncrypted);        NSString* cipherText = nil;    if (cryptStatus == kCCSuccess) {        NSData* data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];        cipherText = [GTMBase64 stringByEncodingData:data];    }    return cipherText;}-(NSString*) decryptUseDES:(NSString*)cipherText key:(NSString*)key {    NSData* cipherData = [GTMBase64 decodeString:cipherText];        // 8kB~    unsigned char buffer[8196];    memset(buffer, 0, sizeof(char));    size_t numBytesDecrypted = 0;    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,                                           kCCAlgorithmDES,                                           kCCOptionPKCS7Padding,                                           [key UTF8String],                                           kCCKeySizeDES,                                           _iv_,                                           [cipherData bytes],                                           [cipherData length],                                           buffer,                                           8196,                                           &numBytesDecrypted);    NSString* plainText = nil;        /**     * 2012.05.27.09.34,中间遇到一个问题,     * 查看了一下返回的状态码,皆是因为 buffer 的尺寸过小所致     * 最开始 buffer 的长度是 1024~     *///    NSLog(@"%d", cryptStatus);        if (cryptStatus == kCCSuccess) {        NSData* data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesDecrypted];        plainText = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];    }    return plainText;}@end



原创粉丝点击