在需要的地方
#import<CommonCrypto/CommonCryptor.h>
//-----------------------------------------------------------加解密方法
/* DES加密 */
-(NSData *) encryptUseDES:(NSString *)clearText key:(NSString *)key;
/** DES解密 */
-(NSString *) decryptUseDES:(NSData *)plainData key:(NSString *)key ;
//-----------------------------------------------------------加解密具体实现
/*
DES加密
*/
-(NSData *) encryptUseDES:(NSString *)clearText key:(NSString *)key
{
NSData *cipherData = nil;
NSData *textData = [clearText dataUsingEncoding:NSUTF8StringEncoding]; //NSUTF8StringEncoding, NSASCIIStringEncoding
NSUInteger dataLength = [clearText length];
//如果待加密的明文中含有汉字的话,dataLength长度要增加(因为能用ASCII码表示的字符占一个字节,而汉字占3个字节)
int length = [clearText length];
int hangCount = 0;//计数clearText中汉字的数量
for (int i=0; i<length; ++i)
{
NSRange range = NSMakeRange(i, 1);
NSString *subString = [clearText substringWithRange:range];
const char *cString = [subString UTF8String];
if (strlen(cString) == 3) //汉字占用三个3个字节
{
hangCount++;
}
}
dataLength = dataLength + hangCount*2;
unsigned char buffer[2048];
// memset(buffer, 0, sizeof(char));
size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES, //kCCEncrypt,kCCDecrypt
kCCOptionPKCS7Padding, //kCCOptionECBMode,kCCOptionPKCS7Padding
[key UTF8String], kCCKeySizeDES, //,kCCKeySizeDES, kCCKeySizeMinRC2
NULL, //iv
[textData bytes] , dataLength,
buffer, 2048,
&numBytesEncrypted);
if (cryptStatus == kCCSuccess) {
NSLog(@"DES加密成功");
cipherData = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];
}else{
NSLog(@"DES加密失败");
}
return cipherData;
}
/**
DES解密
*/
-(NSString *) decryptUseDES:(NSData *)plainData key:(NSString *)key
{
NSString *cleartext = nil;
NSUInteger dataLength = [plainData length];
// unsigned char buffer[1024];
unsigned char buffer[2048];
memset(buffer, 0, sizeof(char));
size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmDES,
kCCOptionPKCS7Padding,
[key UTF8String], kCCKeySizeDES,
NULL, //iv
[plainData bytes] , dataLength,
buffer, 2048,
&numBytesEncrypted);
if (cryptStatus == kCCSuccess) {
NSLog(@"DES解密成功");
NSData *data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];
cleartext = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}else{
NSLog(@"DES解密失败");
}
return cleartext;
}
//-----------------------------------------------------------实现一下,结果
/*其中明文和key分别为:
static NSString *beforeEncrptStr = @"张张张汤汤汤!@#_zhangjiacheng张小宇汤";
static NSString *encrptKeyStr = @"12345678";
*/
2013-03-22 11:34:56.051 DESZJCDemo[2123:207] before encypt string ===张张张汤汤汤!@#_zhangjiacheng张小宇汤
2013-03-22 11:34:56.143 DESZJCDemo[2123:207] encypt key====12345678
2013-03-22 11:34:56.151 DESZJCDemo[2123:207] DES加密成功
2013-03-22 11:34:57.235 DESZJCDemo[2123:207] DES解密成功
2013-03-22 11:34:57.237 DESZJCDemo[2123:207] success Decrypt String====张张张汤汤汤!@#_zhangjiacheng张小宇汤