日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ios平台下的DES加密

發布時間:2025/3/19 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ios平台下的DES加密 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
ios des 加/解密(with base64) #include <CommonCrypto/CommonCryptor.h> + (NSString*)Encrypte:(NSString*)src key:(NSString*)key{NSString* retStr = nil;NSData* srcData = [src dataUsingEncoding:NSUTF8StringEncoding];size_t dataOutAvilable = ([srcData length] + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);unsigned char* dataOut = (unsigned char* )malloc(dataOutAvilable * sizeof(unsigned char));memset((void*)dataOut, 0x0, dataOutAvilable);size_t dataOutMoved = 0;Byte iv[] = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF};CCCryptorStatus ccStatus = CCCrypt(kCCEncrypt, kCCAlgorithm3DES, kCCOptionPKCS7Padding | kCCOptionECBMode, (void const*)[key UTF8String], kCCKeySize3DES, iv, [srcData bytes], [srcData length], (void*)dataOut, dataOutAvilable, &dataOutMoved);if (ccStatus == 0) {//成功 base64int base64Len = base64_encode_length(dataOutMoved) + 2;char* tmp = new char[base64Len];memset(tmp, 0, base64Len);int base64Ret = base64_encode((const char*)dataOut,dataOutMoved,tmp,base64Len);if (base64Ret > 0) {retStr = [[[NSString alloc] initWithUTF8String:tmp] autorelease];}delete []tmp;}//NSLog(@"ccStatus: %d EncrypteStr:%@",ccStatus,retStr); delete dataOut;return retStr; }+ (NSString*)Decypte:(NSString*)src key:(NSString*)key{NSString* retStr = nil;int base64Len = base64_decode_length([src length]) + 2;char* tmp = new char[base64Len];memset(tmp, 0, base64Len);CCCryptorStatus ccStatus = kCCParamError;int base64Ret = base64_decode([src UTF8String], [src length],tmp, base64Len);if (base64Ret > 0) {size_t dataOutAvilable = (base64Len + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);unsigned char* dataOut = (unsigned char* )malloc(dataOutAvilable * sizeof(unsigned char));memset((void*)dataOut, 0x0, dataOutAvilable);size_t dataOutMoved = 0;Byte iv[] = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF};ccStatus = CCCrypt(kCCDecrypt, kCCAlgorithm3DES, kCCOptionPKCS7Padding | kCCOptionECBMode, (void const*)[key UTF8String], kCCKeySize3DES, iv, (const void*)tmp, base64Ret, (void*)dataOut, dataOutAvilable, &dataOutMoved);if (ccStatus == 0) {retStr = [[[NSString alloc] initWithBytes:dataOut length:dataOutMoved encoding:NSUTF8StringEncoding] autorelease];}delete dataOut;}//NSLog(@"ccStatus: %d Decypte:%@",ccStatus,retStr); delete []tmp;return retStr; }

?

?

?

今天終于把ios平臺下的DES加密算法調通了,在這里記錄一下。說一下我遇到的問題吧?!   ?/p>

?

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

?

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

?

      NSMutableData* bufkeyData =[NSMutableData?dataWithLength:2];

      int* bufkey = bufkeyData.mutableBytes;    

?

    ? ??傳參 ? ??[self?make_key:bufkeyData?number:j];?? ? ? ? ? ? ? ? ? ??

     ?取值 ?? int* bufkey = bufkeyData.mutableBytes;       

?

?

  第二,NSData 與 Byte[]之間的轉換

?

?

     ?NSData?*btsData = http://www.cnblogs.com/upwifi/archive/2011/09/05/[in_strdataUsingEncoding:NSUTF8StringEncoding];

?

?

Byte?*byteData = http://www.cnblogs.com/upwifi/archive/2011/09/05/(Byte*)malloc(len);

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

?

?

NSMutableData?*bts2Data = http://www.cnblogs.com/upwifi/archive/2011/09/05/[NSMutableDatadataWithLength:len];

?

[bts2Data?initWithBytes:byteData?length:len];  

?

 

  第三,需要用一下 Base64?給加密前的和加密后的字串做Encod和Decode處理,我用了第三方的NSData+Base64.m    

?

?

?? ? 下面是頭文件:    

?

  

//

//? 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 

總結

以上是生活随笔為你收集整理的ios平台下的DES加密的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。