+ (NSString *)encryptWithText:(NSString *)sText theKey:(NSString *)aKey;
+ (NSString *)decryptWithText:(NSString *)sText theKey:(NSString *)aKey;
+ (NSString *)encrypt:(NSString *)sText encryptOrDecrypt:(CCOperation)encryptOperation key:(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:[NSData dataWithBytes:(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 *)sText theKey:(NSString *)aKey
{
return [self encrypt:sText encryptOrDecrypt:kCCEncrypt key:aKey];
}
+ (NSString *)decryptWithText:(NSString *)sText theKey:(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 *)clearText key:(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;
}