resStr = [Hisun3DESForSDK TripleDES:dataStr andKey:keyStr encryptOrDecrypt:1];
+(NSString*)TripleDES:(NSString*)plainText andKey:(NSString *)key encryptOrDecrypt:(CCOperation)encryptOrDecrypt
{
const void *vplainText;
size_t plainTextBufferSize;
if (encryptOrDecrypt == kCCDecrypt)//解密
{
/** GBK转码 */
NSData *EncryptData = [GTMBase64ForSDK decodeData:[plainText dataUsingEncoding:CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000)]];
NSLog(@"EncryptData=%@",EncryptData);
plainTextBufferSize = [EncryptData length];
NSLog(@"plainTextBufferSize=%zu",plainTextBufferSize);
vplainText = [EncryptData bytes];
}
else //加密
{
NSData* data = [plainText dataUsingEncoding:CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000)];
plainTextBufferSize = [data length];
vplainText = (const void *)[data bytes];
}
CCCryptorStatus ccStatus;
uint8_t *bufferPtr = NULL;
size_t bufferPtrSize = 0;
size_t movedBytes = 0;
bufferPtrSize = (plainTextBufferSize + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);
bufferPtr = malloc( bufferPtrSize * sizeof(uint8_t));
memset((void *)bufferPtr, 0x0, bufferPtrSize);
const void *vkey = (const void *)[key UTF8String];
ccStatus = CCCrypt(encryptOrDecrypt,
kCCAlgorithm3DES,
kCCOptionPKCS7Padding,
vkey,
kCCKeySize3DES,
[[@"01234567" dataUsingEncoding:NSUTF8StringEncoding] bytes],
vplainText,
plainTextBufferSize,
(void *)bufferPtr,
bufferPtrSize,
&movedBytes);
NSString *result;
if (encryptOrDecrypt == kCCDecrypt)
{
//声明一个gbk编码类型
NSStringEncoding gbkEncoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
NSLog(@"gbkEncoding=%lu",(unsigned long)gbkEncoding);
result = [[[NSString alloc] initWithData:[NSData dataWithBytes:(const void *)bufferPtr
length:(NSUInteger)movedBytes]
encoding:gbkEncoding]
autorelease];
NSLog(@"result=%@",result);
}
else
{
NSData *myData = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes];
result = [GTMBase64ForSDK stringByEncodingData:myData];
}
return result;
}
参考示例如下: