您的位置:首页 > 移动开发 > IOS开发

ios des 加/解密(with base64)

2011-12-27 15:55 197 查看
#include <CommonCrypto/CommonCryptor.h>

+ (NSString*)Encrypte:(NSString*)src key:(NSString*)key{

NSString* retStr = nil;

NSData* srcData = [src dataUsingEncoding:NSUTF8StringEncoding];

size_t dataOutAvilable = ([srcData length] + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);

unsigned char* dataOut = (unsigned char* )malloc(dataOutAvilable * sizeof(unsigned char));

memset((void*)dataOut, 0x0, dataOutAvilable);

size_t dataOutMoved = 0;

Byte iv[] = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF};

CCCryptorStatus ccStatus = CCCrypt(kCCEncrypt, kCCAlgorithm3DES, kCCOptionPKCS7Padding | kCCOptionECBMode, (void const*)[key UTF8String], kCCKeySize3DES, iv, [srcData bytes], [srcData length], (void*)dataOut, dataOutAvilable, &dataOutMoved);

if (ccStatus == 0) {//成功 base64

int base64Len = base64_encode_length(dataOutMoved) + 2;

char* tmp = new char[base64Len];

memset(tmp, 0, base64Len);

int base64Ret = base64_encode((const char*)dataOut,dataOutMoved,tmp,base64Len);

if (base64Ret > 0) {

retStr = [[[NSString alloc] initWithUTF8String:tmp] autorelease];

}

delete []tmp;

}

//NSLog(@"ccStatus: %d EncrypteStr:%@",ccStatus,retStr);

delete dataOut;

return retStr;

}

+ (NSString*)Decypte:(NSString*)src key:(NSString*)key{

NSString* retStr = nil;

int base64Len = base64_decode_length([src length]) + 2;

char* tmp = new char[base64Len];

memset(tmp, 0, base64Len);

CCCryptorStatus ccStatus = kCCParamError;

int base64Ret = base64_decode([src UTF8String], [src length],tmp, base64Len);

if (base64Ret > 0) {

size_t dataOutAvilable = (base64Len + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);

unsigned char* dataOut = (unsigned char* )malloc(dataOutAvilable * sizeof(unsigned char));

memset((void*)dataOut, 0x0, dataOutAvilable);

size_t dataOutMoved = 0;

Byte iv[] = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF};

ccStatus = CCCrypt(kCCDecrypt, kCCAlgorithm3DES, kCCOptionPKCS7Padding | kCCOptionECBMode, (void const*)[key UTF8String], kCCKeySize3DES, iv, (const void*)tmp, base64Ret, (void*)dataOut, dataOutAvilable, &dataOutMoved);

if (ccStatus == 0) {

retStr = [[[NSString alloc] initWithBytes:dataOut length:dataOutMoved encoding:NSUTF8StringEncoding] autorelease];

}

delete dataOut;

}

//NSLog(@"ccStatus: %d Decypte:%@",ccStatus,retStr);

delete []tmp;

return retStr;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: