IOS DES加解密(带汉字的NSString的加解密)

第一步

  在需要的地方

   #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张小宇汤



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值