iOS将字符串3DES加密后转Base64
来源:互联网 发布:知柏地黄丸不良反应 编辑:程序博客网 时间:2024/06/05 06:51
为NSString写分类
NSString+Base64After3DES
.h文件
#import <Foundation/Foundation.h>#import <CommonCrypto/CommonCryptor.h>@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 <Foundation/Foundation.h>#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方法里面使用. 在需要的地方使用这句话就可以
0 0
- iOS将字符串3DES加密后转Base64
- iOS DES 加密转base64
- iOS DES+Base64 加密、解密
- 【代码笔记】iOS-3DES+Base64加密解密
- des 和 3des 的base64加密
- ios开发之DES+Base64 加密、解密
- ios 加密解密(包括base64,DES)
- IOS 加密解密(AES、DES、base64、md5)
- iOS - 加密 Base64 MD5 DES AES RSA
- base64加密后字符串长度
- iOS DES加密与3DES加密
- IOS 纯DES加密 与 使用base64加密
- 【请求加密】android ios java后台通用DES base64加密
- (iOS)Base64加密和DES加密、以及JAVA和iOS中DES加密统一性问题
- DES加密+Base64转换转实现代码
- android 的Base64+3DES加密
- DES+Base64 加密、解密
- DES加密 base64转化
- poj--1274--The Perfect Stall(匈牙利裸题)
- 工作生活感悟
- 隐藏输入法
- Ubuntu设置ssh免密码登陆
- 安卓通知的使用系列6:对话框通知的使用之自定义对话框
- iOS将字符串3DES加密后转Base64
- overridePendingTransition()的作用
- WEB开发者必备的7个JavaScript函数
- Vijos P1123均分纸牌
- unix_8_进程控制(一)
- 效率:条款22 考虑以操作符复合形式op+= 取代其独身形式op=
- 风雨后才能见彩虹
- 基础算法
- servlet和jsp