本文转载至 http://www.cocoachina.com/bbs/read.php?tid=177167
-(NSString *)TripleDES:(NSString *)plainText encryptOrDecrypt:(CCOperation)encryptOrDecrypt encryptOrDecryptKey:(NSString *)encryptOrDecryptKey
{
     
    const void *vplainText;
    size_t plainTextBufferSize;
     
    if (encryptOrDecrypt == kCCDecrypt)//解密
    {
        NSData *EncryptData = [GTMBase64 decodeData:[plainText dataUsingEncoding:NSUTF8StringEncoding]];
        plainTextBufferSize = [EncryptData length];
        vplainText = [EncryptData bytes];
    }
    else //加密
    {
        NSData* data = [plainText dataUsingEncoding:NSUTF8StringEncoding];
        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);
    // memset((void *) iv, 0x0, (size_t) sizeof(iv));
     
    const void *vkey = (const void *)[encryptOrDecryptKey UTF8String];
    // NSString *initVec = @"init Vec";
    //const void *vinitVec = (const void *) [initVec UTF8String];
    //  Byte iv[] = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF};
    ccStatus = CCCrypt(encryptOrDecrypt,
                       kCCAlgorithm3DES,
                       kCCOptionPKCS7Padding | kCCOptionECBMode,
                       vkey,
                       kCCKeySize3DES,
                       nil,
                       vplainText,
                       plainTextBufferSize,
                       (void *)bufferPtr,
                       bufferPtrSize,
                       &movedBytes);
    //if (ccStatus == kCCSuccess) NSLog(@"SUCCESS");
    /*else if (ccStatus == kCC ParamError) return @"PARAM ERROR";
     else if (ccStatus == kCCBufferTooSmall) return @"BUFFER TOO SMALL";
     else if (ccStatus == kCCMemoryFailure) return @"MEMORY FAILURE";
     else if (ccStatus == kCCAlignmentError) return @"ALIGNMENT";
     else if (ccStatus == kCCDecodeError) return @"DECODE ERROR";
     else if (ccStatus == kCCUnimplemented) return @"UNIMPLEMENTED"; */
     
    NSString *result;
     
    if (encryptOrDecrypt == kCCDecrypt)
    {
        result = [[[NSString alloc] initWithData:[NSData dataWithBytes:(const void *)bufferPtr
                                                                length:(NSUInteger)movedBytes]
                                        encoding:NSUTF8StringEncoding]
                  autorelease];
    }
    else
    {
        NSData *myData = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes];
        result = [GTMBase64 stringByEncodingData:myData];
    }
     
    return result;
}

 

最新文章

  1. gradle项目中profile的实现
  2. python之RabbitMQ
  3. 《C与指针》第八章练习
  4. 在Win7 64位注册ActiveX控件
  5. mmap直接控制底层【转】
  6. qq红心头像[中国心]制作教程之Photoshop教程
  7. 全局变量&局部变量
  8. OSI七层模型具体解释
  9. C++ | 调试 · 从汇编代码看i++和++i的区别
  10. 在iOS当中发送电子邮件和短信
  11. 分享给大家一个简单的数据导出excel类
  12. 文件查找和比较命令 来自: http://man.linuxde.net/find
  13. Linux学习(十六)VIM
  14. 利用Needleman–Wunsch算法进行DNA序列全局比对
  15. nginx时间设置解析函数
  16. 调用list(itertools.combinations(keys,3))出现MemoryError的解决办法
  17. okhttp 内网可以有,但外网访问数据返不回来,代码一样
  18. HTML-CSS写抽屉网的置顶区域
  19. JAVA多线程之中断机制(stop()、interrupted()、isInterrupted())
  20. 游戏引擎中三大及时光照渲染方法介绍(以unity3d为例)

热门文章

  1. System.InvalidOperationException异常
  2. 矩阵压缩写法 scipy spark.ml.linalg里都有,CRS,CCS
  3. 2016.6.30 tomcat开启时,显示端口被占用,如何修改端口
  4. 20160208.CCPP体系具体解释(0018天)
  5. 利用eolinker实现api接口mock测试(mock server)
  6. OpenCV2学习笔记(十五):利用Cmake高速查找OpenCV函数源代码
  7. 倍福TwinCAT(贝福Beckhoff)基础教程 松下伺服驱动器报错 81.0怎么办
  8. GROUP BY和HAVING 以及mysql中常用的日期函数
  9. IIS相关知识和经验的碎皮化记录
  10. Android文章收藏