iOS 3DES加密
2024-09-06 21:38:54
本文转载至 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;
}
最新文章
- gradle项目中profile的实现
- python之RabbitMQ
- 《C与指针》第八章练习
- 在Win7 64位注册ActiveX控件
- mmap直接控制底层【转】
- qq红心头像[中国心]制作教程之Photoshop教程
- 全局变量&;局部变量
- OSI七层模型具体解释
- C++ | 调试 · 从汇编代码看i++和++i的区别
- 在iOS当中发送电子邮件和短信
- 分享给大家一个简单的数据导出excel类
- 文件查找和比较命令 来自: http://man.linuxde.net/find
- Linux学习(十六)VIM
- 利用Needleman–Wunsch算法进行DNA序列全局比对
- nginx时间设置解析函数
- 调用list(itertools.combinations(keys,3))出现MemoryError的解决办法
- okhttp 内网可以有,但外网访问数据返不回来,代码一样
- HTML-CSS写抽屉网的置顶区域
- JAVA多线程之中断机制(stop()、interrupted()、isInterrupted())
- 游戏引擎中三大及时光照渲染方法介绍(以unity3d为例)
热门文章
- System.InvalidOperationException异常
- 矩阵压缩写法 scipy spark.ml.linalg里都有,CRS,CCS
- 2016.6.30 tomcat开启时,显示端口被占用,如何修改端口
- 20160208.CCPP体系具体解释(0018天)
- 利用eolinker实现api接口mock测试(mock server)
- OpenCV2学习笔记(十五):利用Cmake高速查找OpenCV函数源代码
- 倍福TwinCAT(贝福Beckhoff)基础教程 松下伺服驱动器报错 81.0怎么办
- GROUP BY和HAVING 以及mysql中常用的日期函数
- IIS相关知识和经验的碎皮化记录
- Android文章收藏