博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS将字符串3DES加密后转Base64
阅读量:2432 次
发布时间:2019-05-10

本文共 3628 字,大约阅读时间需要 12 分钟。

为NSString写分类

NSString+Base64After3DES

.h文件

#import 
#import
@interface NSString (Base64After3DES)/** * 3DES加密并转Base64 * * @param plainText 要加密的字符串 * @param encryptOrDecrypt 系统固定参数: kCCEncrypt * @param key 自己设定的秘钥 * * @return 3DES加密后并转Base64的字符串 */+ (NSString*)TripleDES:(NSString*)plainText encryptOrDecrypt:(CCOperation)encryptOrDecrypt key:(NSString*)key; // 这个分类需要注意-fno-objc-arc的问题(需要给这个分类的.m和GTMBase64.m添加)@end
.m文件

#import "NSString+Base64After3DES.h"#import "GTMBase64.h"@implementation NSString (Base64After3DES)+(NSString*)TripleDES:(NSString*)plainText encryptOrDecrypt:(CCOperation)encryptOrDecrypt key:(NSString*)key{    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 *)[key 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;}@end

GTMBase64可以在GitHub上搜索下载到

在main方法里使用

#import 
#import "NSString+Base64After3DES.h"int main(int argc, const char * argv[]) { @autoreleasepool { NSString *idenStr = [NSString TripleDES:@"test" encryptOrDecrypt:kCCEncrypt key:@"key"]; NSLog(@"%@", idenStr); } return 0;}
这个在main方法里使用, 是我在测试的时候用的Command Line Tool测试用的, 不是在项目的main方法里面使用.  在需要的地方使用这句话就可以

转载地址:http://hjtmb.baihongyu.com/

你可能感兴趣的文章
你我的父母,都在被互联网“割韭菜”
查看>>
程序员下班后都忙些啥?| 程序员有话说
查看>>
Java 帝国对 Python 的渗透能成功吗?
查看>>
程序员写代码没激情该怎么破?
查看>>
我是如何从低端面畜到高端面霸的?
查看>>
百面机器学习!算法工程师面试宝典!| 码书
查看>>
漫画 | 一个前端渣渣的成功逆袭
查看>>
与吴恩达并肩战斗,她是 AI 界的女超人!|人物志
查看>>
微信手机 WeOS 的可行性到底有多大?
查看>>
阿里面试,我挂在了第四轮……
查看>>
C++ 程序员到高级架构师,必须经历的三个阶段
查看>>
和 Java、C# 等语言对比后,Python 简直酷上天了!
查看>>
程序媛到最后,拼的到底是什么?
查看>>
笑死!996 程序员竟然做了这个梦!| 每日趣闻
查看>>
“再见,微软!”
查看>>
ARM 发布新一代 CPU 和 GPU,实现 20% 性能提升!
查看>>
技术引路:机器学习仍大有可为,但方向在哪里?
查看>>
漫画:如何给女朋友解释什么是编译与反编译
查看>>
刷屏了!这篇 Python 学习贴,90% 的程序员都用的上!
查看>>
漫画:如何给女朋友解释什么是适配器模式?
查看>>