iOS下的DES加密

转载 2016年08月29日 09:53:35

今天终于把iOS平台下的DES加密算法调通了,在这里记录一下。说一下我遇到的问题吧。    


  第一,关于传参,Objective-C和C,C++一样,不能把值类型数组做为参数,传给另一个方法,方法的返回值的类型也一样不可以是值类型数组。一旦这么做了,接受参数的方法只能获取数组中的首元素。    


       解决方法是用 NSMutableData 把值类型的数组包一层,代码如下:    


      NSMutableData* bufkeyData = [NSMutableDatadataWithLength:2];

       int* bufkey = bufkeyData.mutableBytes;    


 

        传参     [self make_key:bufkeyData number:j];                     取值    int* bufkey = bufkeyData.mutableBytes;       



  第二,NSData 与 Byte[]之间的转换



    NSData *btsData = [in_str dataUsingEncoding:NSUTF8StringEncoding];

 

 

    Byte *byteData = (Byte*)malloc(len);

    memcpy(byteData, [btsData bytes], len);

 

 

    NSMutableData *bts2Data = [NSMutableDatadataWithLength:len];

 

    [bts2Data initWithBytes:byteData length:len];  


 

  第三,i386架构下定义值类型变量需赋初值     



     下面是头文件:    


  

//

//  DesEncrypt.h

//  DesEncryptDemo

//

//  Created by fred yu on 9/2/11.

//  Copyright 2011 __MyCompanyName__. All rights reserved.

//

 

#import <Foundation/Foundation.h>

 

enumDesStrategy {

    DesSimple = 1,

    Des3 = 2,

    DesCBC = 3,

    DesTwoKeys = 4

};

typedef enum DesStrategy DesStrategy;

 

 

 

@interface DesEncrypt : NSObject {

 

    NSMutableArray *keyArray;

 

}

 

 

 

-(NSData *)des:(NSData *)input_data key:(NSString *)key encrypt:(bool)encrypt;

 

//Encrypt

-(NSString*)encrypt:(NSString *)in_str key:(NSString *)key desMode:(DesStrategy)desMode str2:(NSString *)str2;

 

//Decrypt

-(NSString*)decrypt:(NSString *)in_str key:(NSString *)key desMode:(DesStrategy)desMode str2:(NSString *)str2;

 

//DesCBC

-(NSMutableData *)desCBC:(NSMutableData *)input_data key:(NSString *)key_str iv:(NSString *)iv encrypt:(bool)encrypt;

 

-(NSMutableData *)des:(NSMutableData *)data key:(NSMutableData *)key iv:(NSMutableData *)iv encrypt:(bool)encrypt;

 

//DesCreateKeys

-(void)desCreateKeys:(NSMutableData *)key;

 

//make_data

-(void)make_data:(NSMutableData *)data number:(int)number;

 

//make_key

-(NSMutableData *)make_key:(NSMutableData *)in_key number:(int)number;

 

//handle_data

-(NSMutableData *)handle_data:(NSMutableData *)data encrypt:(bool)encrypt;

 

//change_data

-(NSMutableData *)change_data:(NSMutableData *)olddata change_tbType:(int)change_tbType;

 

 

 

@end    


 

 

    测试代码及输出结果:    



#import <Foundation/Foundation.h>

#import "DesEncrypt.h"

 

int main (int argc, const char * argv[]) {

    NSAutoreleasePool * pool = [[NSAutoreleasePoolallocinit];

 

    // insert code here...

 

    DesEncrypt * desEncrypt = [[DesEncrypt allocinit];

 

   NSString *key1 = @"23245321";

   NSString *key2 = @"77585210";

 

   NSString *msg = @"abcdefghijk";

 

   NSLog(@"消息: %@",msg);

 

   NSString *s = [desEncrypt encrypt:msg key:key1 desMode:DesCBC str2:key2];

 

   NSLog(@"经过加密处理: %@",s);

 

   NSString *ss = [desEncrypt decrypt:s key:key1 desMode:DesCBC str2:key2];

 

   NSLog(@"经过解密处理: %@",ss);

 

    [pool drain];

    return 0;

}    


 

 

fred-yus-MacBook-Pro:~ fred$ /Users/fred/Documents/DesEncryptDemo/build/Debug/DesEncryptDemo ; exit;

2011-09-05 13:05:08.552 DesEncryptDemo[6085:903] 消息: abcdefghijk

2011-09-05 13:05:08.555 DesEncryptDemo[6085:903] 经过加密处理: vL5Am3KcszqpJdB594OrkA==

2011-09-05 13:05:08.555 DesEncryptDemo[6085:903] 经过解密处理: abcdefghijk

logout    


 
   有兴趣的朋友可以加我QQ:830911

ios des加密与解密(对应JAVA加解密)

ios des加密与解密
  • cl61917380
  • cl61917380
  • 2015年12月28日 15:21
  • 1354

【iOS】关于DES的加密

前天后台给了个C#的DES加密算法需要我研究,并运用到新的项目中去,虽然网上有很多,但质量也参差不齐,并没有完全符合自己的需求的。现将这几天的研究成果附上: -(NSString *)encrypt:...
  • u013068862
  • u013068862
  • 2016年09月11日 15:48
  • 1319

IOS、java支持DES加密

最近在考虑数据加密方面的需求,所以对数据加密简单的看了一下,当然不是看的原理,只是看看怎么能够实现。现在我们需要实现的是移动端和后台(java)数据加解密的配合,开始的时候考虑的使用RSA,因为RSA...
  • mengxiangyue
  • mengxiangyue
  • 2014年10月12日 10:25
  • 17953

IOS 纯DES加密 与 使用base64加密

http://blog.csdn.net/kylinbl/article/details/8641246 DES 程序案例地址
  • u011043997
  • u011043997
  • 2014年04月21日 17:49
  • 7106

ios中的DES/CBC模式加密

之前做一个IOS项目,是将公司已经做好的android项目转换成IOS项目。但是在处理DES加密时,加密后的字段一直不能匹配,这真心相当郁闷。只好稍微研究一下DES的加密模式。 首先现附上androi...
  • u010184533
  • u010184533
  • 2014年09月01日 09:26
  • 3670

iOS des加密转码16进制字符串

iOS des加密转码16进制字符串
  • hu434587115
  • hu434587115
  • 2016年07月15日 17:04
  • 1184

iOS之Des加密(含资源及Demo)

一,说明 最近有人在群中问我des加密的事,告诉我网上的将des的资料很少. 会者不难,难着不会. 二,代码呈现(Demo在本文最后). 在做des加密,解密时,你需要和服务端约定2个字段.   第一...
  • luochuanAD
  • luochuanAD
  • 2017年04月01日 16:11
  • 1863

DES加密解密—Android IOS C#互通

公司项目需要,聊天的时候不想明文传输,需要对话双方各有一个密钥,才能解开发送的密文信息!所以自然而然用到了DES加解密。但是问题随之而来了,我们后台是C#做的,客户端有我们Android和IOS,所以...
  • qq_29061341
  • qq_29061341
  • 2016年08月08日 14:58
  • 1835

iOS oc des加密 转自网络。

这里使用框架提供的des加解密库: 首先引入头文件 #import 主要的加解密函数如下: /*字符串加密  *参数  *plainText : 加密明文  *key       ...
  • u011111270
  • u011111270
  • 2014年09月16日 10:11
  • 1418

iOS DES加密和解密

这里写代码//加密 - (NSString *) encryptUseDES:(NSString *)plainText key:(NSString *)key { NSString *cip...
  • BlingbringBling
  • BlingbringBling
  • 2016年11月09日 17:32
  • 488
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS下的DES加密
举报原因:
原因补充:

(最多只允许输入30个字)