+ (NSString *)encryptWithText:(NSString *)sTexttheKey:(NSString *)aKey;
+ (NSString *)decryptWithText:(NSString *)sTexttheKey:(NSString *)aKey;
+ (NSString *)encrypt:(NSString *)sTextencryptOrDecrypt:(CCOperation)encryptOperationkey:(NSString *)key
{
const void *vplainText;
size_t plainTextBufferSize;
if (encryptOperation== kCCDecrypt)
{
NSData *decryptData= [GTMBase64 decodeData:[sTextdataUsingEncoding:NSUTF8StringEncoding]];
//NSData*decryptData = [GTMBase64 decodeString:sText ];
plainTextBufferSize= [decryptData length];
vplainText= [decryptData bytes];
}
else
{
NSData*encryptData =[sText dataUsingEncoding:NSUTF8StringEncoding];
plainTextBufferSize= [encryptData length];
vplainText= (const void *)[encryptData bytes];
}
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);
NSString *initVec= @"12345678";
const void *vkey= (const void *)[key UTF8String];
const void *vinitVec= (const void *)[initVec UTF8String];
CCCryptorStatus ccStatus= CCCrypt(encryptOperation,
kCCAlgorithm3DES,
kCCOptionPKCS7Padding,
vkey,
kCCKeySize3DES,
vinitVec,
vplainText,
plainTextBufferSize,
(void *)bufferPtr,
bufferPtrSize,
&movedBytes);
NSLog(@"%d",ccStatus);
NSString *result= nil;
if (ccStatus== kCCSuccess)
{
if (encryptOperation== kCCDecrypt)
{
result= [[NSString alloc] initWithData:[NSDatadataWithBytes:(const void *)bufferPtrlength:(NSUInteger)movedBytes] encoding:NSUTF8StringEncoding];
}
else
{
NSData *data= [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes];
result= [GTMBase64 stringByEncodingData:data];
//NSLog(@"result:%@",result);
//NSData *temp = [GTMBase64 decodeString:result];
}
}
return result;
}
+ (NSString *)encryptWithText:(NSString *)sTexttheKey:(NSString *)aKey
{
return [self encrypt:sText encryptOrDecrypt:kCCEncrypt key:aKey];
}
+ (NSString *)decryptWithText:(NSString *)sTexttheKey:(NSString *)aKey
{
return [self encrypt:sText encryptOrDecrypt:kCCDecrypt key:aKey];
}
第二种方法:经多次测试,没有问题,同样也需要GTMBase文件
+(NSString*)decryptUseDES:(NSString*)cipherText key:(NSString*)key {
// 利用 GTMBase64 解碼 Base64 字串
NSData* cipherData =[GTMBase64 decodeString:cipherText];
unsigned char buffer[1024];
memset(buffer, 0, sizeof(char));
size_t numBytesDecrypted= 0;
//IV 偏移量不需使用
CCCryptorStatus cryptStatus= CCCrypt(kCCDecrypt,
kCCAlgorithmDES,
kCCOptionPKCS7Padding | kCCOptionECBMode,
[key UTF8String],
kCCKeySizeDES,
nil,
[cipherData bytes],
[cipherData length],
buffer,
1024,
&numBytesDecrypted);
NSString* plainText= nil;
if (cryptStatus== kCCSuccess) {
NSData* data =[NSData dataWithBytes:buffer length:(NSUInteger)numBytesDecrypted];
plainText =[[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
}
return plainText;
}
+(NSString *)encryptUseDES:(NSString *)clearTextkey:(NSString *)key
{
NSData *data =[clearText dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
unsigned char buffer[1024];
memset(buffer, 0, sizeof(char));
size_t numBytesEncrypted= 0;
CCCryptorStatus cryptStatus= CCCrypt(kCCEncrypt,
kCCAlgorithmDES,
kCCOptionPKCS7Padding | kCCOptionECBMode,
[key UTF8String],
kCCKeySizeDES,
nil,
[data bytes],
[data length],
buffer,
1024,
&numBytesEncrypted);
NSString* plainText= nil;
if (cryptStatus== kCCSuccess) {
NSData *dataTemp=[NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];
plainText =[GTMBase64 stringByEncodingData:dataTemp];
}else{
NSLog(@"DES加密失败");
}
return plainText;
}