iOS下的DES加密

轉自:http://www.cnblogs.com/upwifi/archive/2011/09/05/2166943.html

 今天終於把iOS平臺下的DES加密算法調通了,在這裏記錄一下。說一下我遇到的問題吧。    


  第一,關於傳參,Objective-C和C,C++一樣,不能把值類型數組做爲參數,傳給另一個方法,方法的返回值的類型也一樣不可以是值類型數組。一旦這麼做了,接受參數的方法只能獲取數組中的首元素。    


     解決方法是用 NSMutableData 把值類型的數組包一層,代碼如下:    


    NSMutableData* bufkeyData = [NSMutableData dataWithLength: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 = [NSMutableData dataWithLength: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>

enum DesStrategy {

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 = [[NSAutoreleasePool alloc] init];

// insert code here...

DesEncrypt * desEncrypt = [[DesEncrypt alloc] init];

   NSString *key1 = @"12345678";

   NSString *key2 = @"45678923";

   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    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章