iOS 下 3DES加密算法

/**初始化向量*/

#define gIv@"0000000000000000"

这个要和后台或者硬件确定好否则会结果不一样

因为3DES的Key长度是24 被加密的的8的倍数 所以我在方法里面直接把key 补齐了

//加密方法

+ (NSData*)encrypt:(NSData*)plainText andkey:(NSData*)gkey {

NSMutableData*keydata = [[NSMutableDataalloc]init];

if(gkey.length<24)

{

NSMutableData*dddd = [[NSMutableDataalloc]initWithData:gkey];

[ddddappendData:gkey];

[ddddappendData:gkey];

keydata = [ddddsubdataWithRange:NSMakeRange(0,24)];

dddd =nil;

}

else

{

keydata = gkey;

}

size_tplainTextBufferSize = [plainTextlength];

constvoid*vplainText = (constvoid*)[plainTextbytes];

CCCryptorStatusccStatus;

uint8_t*bufferPtr =NULL;

size_tbufferPtrSize =0;

size_tmovedBytes =0;

bufferPtrSize = (plainTextBufferSize +kCCBlockSize3DES) & ~(kCCBlockSize3DES-1);

bufferPtr =malloc( bufferPtrSize *sizeof(uint8_t));

memset((void*)bufferPtr,0x0, bufferPtrSize);

// const void *vkey = (const void *) [gkey UTF8String];

//NSData * Keydata = [ccc dataWithHexString:gkey];

constvoid*keyvoid = (constvoid*)[keydatabytes];

constvoid*vinitVec = (constvoid*) [gIvUTF8String];

ccStatus =CCCrypt(kCCEncrypt,

kCCAlgorithm3DES,

kCCOptionPKCS7Padding|kCCOptionECBMode,

keyvoid,

kCCKeySize3DES,

vinitVec,

vplainText,

plainTextBufferSize,

(void*)bufferPtr,

bufferPtrSize,

&movedBytes);

NSMutableData*myData = [NSDatadataWithBytes:(constvoid*)bufferPtrlength:(NSUInteger)movedBytes];

NSMutableData*resultdata = [myDatasubdataWithRange:NSMakeRange(0, plainText.length)];

// [NSThread sleepForTimeInterval:0.01f];

returnresultdata;

}

//解密方法

+ (NSData*)decrypt:(NSData*)encryptText andkey:(NSData*)gkey

{

// [NSThread sleepForTimeInterval:0.02f];

NSMutableData*keydata = [[NSMutableDataalloc]init];

if(gkey.length<24)

{

NSMutableData*dddd = [[NSMutableDataalloc]initWithData:gkey];

[ddddappendData:gkey];

[ddddappendData:gkey];

keydata = [ddddsubdataWithRange:NSMakeRange(0,24)];

}

else

{

keydata = gkey;

}

//NSData *encryptData = [GTMBase64 decodeData:[encryptText dataUsingEncoding:NSUTF8StringEncoding]];

size_tplainTextBufferSize = [encryptTextlength];

constvoid*vplainText = [encryptTextbytes];

CCCryptorStatusccStatus;

uint8_t*bufferPtr =NULL;

size_tbufferPtrSize =0;

size_tmovedBytes =0;

bufferPtrSize = (plainTextBufferSize +kCCBlockSize3DES) & ~(kCCBlockSize3DES-1);

bufferPtr =malloc( bufferPtrSize *sizeof(uint8_t));

memset((void*)bufferPtr,0x0, bufferPtrSize);

constvoid*keyvoid = (constvoid*)[keydatabytes];

constvoid*vinitVec = (constvoid*) [gIvUTF8String];

ccStatus =CCCrypt(kCCDecrypt,

kCCAlgorithm3DES,

kCCOptionECBMode,

keyvoid,

kCCKeySize3DES,

vinitVec,

vplainText,

plainTextBufferSize,

(void*)bufferPtr,

bufferPtrSize,

&movedBytes);

NSData*myData = [NSDatadataWithBytes:(constvoid*)bufferPtrlength:(NSUInteger)movedBytes];

// [NSThread sleepForTimeInterval:0.01f];

returnmyData;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • /**ios常见的几种加密方法: 普通的加密方法是讲密码进行加密后保存到用户偏好设置( [NSUserDefaul...
    彬至睢阳阅读 3,005评论 0 7
  • 前几天做项目的时候遇到了3DES的解密数据,KEY是服务端返回的。在网上查了好多篇文章,发现IOS中3DES...
    烽火七月阅读 1,952评论 1 4
  • 引言 如今手机app五彩缤纷,确保手机用户的数据安全是开发人员必须掌握的技巧,下面通过实例介绍DES在androi...
    freesan44阅读 1,166评论 1 1
  • 一叶一菩提,一花一世界。 今天是喜悦满满的一天,上午睡了个懒觉,6:40起床,听阳明心学,家里做事出一身汗,10点...
    天之心语阅读 243评论 0 0
  • 不知道你们会不会有这种感觉:突然间很迷茫,不知道做些什么。有些文章会说你要读书、出去运动啊、思考啊等等,我自己...
    璇曰阅读 226评论 0 0