您的位置:首页 > 移动开发 > IOS开发

iOS DES 加密转base64

2013-10-09 12:06 302 查看



//用法加密转base64
NSString*str=[selfbase64StringFromText:@"qingjoin"withKey:@"key"];

//转base64解密
NSString*stred=[selftextFromBase64String:strwithKey:@"key"];






//文本先进行DES加密。然后再转成base64
+(NSString*)base64StringFromText:(NSString*)textwithKey:(NSString*)key
{
if(text&&![textisEqualToString:@""]){
//取项目的bundleIdentifier作为KEY
//NSString*key=[[NSBundlemainBundle]bundleIdentifier];
NSData*data=[textdataUsingEncoding:NSUTF8StringEncoding];
//IOS自带DES加密Begin
data=[selfDESEncrypt:dataWithKey:key];
//IOS自带DES加密End
return[selfbase64EncodedStringFrom:data];
}
else{
return@"";
}
}

//先把base64转为文本。然后再DES解密
+(NSString*)textFromBase64String:(NSString*)base64withKey:(NSString*)key
{
if(base64&&![base64isEqualToString:@""]){
//取项目的bundleIdentifier作为KEY
//NSString*key=[[NSBundlemainBundle]bundleIdentifier];
NSData*data=[selfdataWithBase64EncodedString:base64];
//IOS自带DES解密Begin
data=[selfDESDecrypt:dataWithKey:key];
//IOS自带DES加密End
return[[NSStringalloc]initWithData:dataencoding:NSUTF8StringEncoding];
}
else{
return@"";
}
}

/******************************************************************************
函数名称:+(NSData*)DESEncrypt:(NSData*)dataWithKey:(NSString*)key
函数描述:文本数据进行DES加密
输入参数:(NSData*)data
(NSString*)key
输出参数:N/A
返回参数:(NSData*)
备注信息:此函数不可用于过长文本
******************************************************************************/
+(NSData*)DESEncrypt:(NSData*)dataWithKey:(NSString*)key
{
charkeyPtr[kCCKeySizeAES256+1];
bzero(keyPtr,sizeof(keyPtr));

[keygetCString:keyPtrmaxLength:sizeof(keyPtr)encoding:NSUTF8StringEncoding];

NSUIntegerdataLength=[datalength];

size_tbufferSize=dataLength+kCCBlockSizeAES128;
void*buffer=malloc(bufferSize);

size_tnumBytesEncrypted=0;
CCCryptorStatuscryptStatus=CCCrypt(kCCEncrypt,kCCAlgorithmDES,
kCCOptionPKCS7Padding|kCCOptionECBMode,
keyPtr,kCCBlockSizeDES,
NULL,
[databytes],dataLength,
buffer,bufferSize,
&numBytesEncrypted);
if(cryptStatus==kCCSuccess){
return[NSDatadataWithBytesNoCopy:bufferlength:numBytesEncrypted];
}

free(buffer);
returnnil;
}

/******************************************************************************
函数名称:+(NSData*)DESEncrypt:(NSData*)dataWithKey:(NSString*)key
函数描述:文本数据进行DES解密
输入参数:(NSData*)data
(NSString*)key
输出参数:N/A
返回参数:(NSData*)
备注信息:此函数不可用于过长文本
******************************************************************************/
+(NSData*)DESDecrypt:(NSData*)dataWithKey:(NSString*)key
{
charkeyPtr[kCCKeySizeAES256+1];
bzero(keyPtr,sizeof(keyPtr));

[keygetCString:keyPtrmaxLength:sizeof(keyPtr)encoding:NSUTF8StringEncoding];

NSUIntegerdataLength=[datalength];

size_tbufferSize=dataLength+kCCBlockSizeAES128;
void*buffer=malloc(bufferSize);

size_tnumBytesDecrypted=0;
CCCryptorStatuscryptStatus=CCCrypt(kCCDecrypt,kCCAlgorithmDES,
kCCOptionPKCS7Padding|kCCOptionECBMode,
keyPtr,kCCBlockSizeDES,
NULL,
[databytes],dataLength,
buffer,bufferSize,
&numBytesDecrypted);

if(cryptStatus==kCCSuccess){
return[NSDatadataWithBytesNoCopy:bufferlength:numBytesDecrypted];
}

free(buffer);
returnnil;
}

/******************************************************************************
函数名称:+(NSData*)dataWithBase64EncodedString:(NSString*)string
函数描述:base64格式字符串转换为文本数据
输入参数:(NSString*)string
输出参数:N/A
返回参数:(NSData*)
备注信息:
******************************************************************************/
staticconstcharencodingTable[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

+(NSData*)dataWithBase64EncodedString:(NSString*)string
{
if(string==nil)
[NSExceptionraise:NSInvalidArgumentExceptionformat:nil];
if([stringlength]==0)
return[NSDatadata];

staticchar*decodingTable=NULL;
if(decodingTable==NULL)
{
decodingTable=malloc(256);
if(decodingTable==NULL)
returnnil;
memset(decodingTable,CHAR_MAX,256);
NSUIntegeri;
for(i=0;i<64;i++)
decodingTable[(short)encodingTable[i]]=i;
}

constchar*characters=[stringcStringUsingEncoding:NSASCIIStringEncoding];
if(characters==NULL)//NotanASCIIstring!
returnnil;
char*bytes=malloc((([stringlength]+3)/4)*3);
if(bytes==NULL)
returnnil;
NSUIntegerlength=0;

NSUIntegeri=0;
while(YES)
{
charbuffer[4];
shortbufferLength;
for(bufferLength=0;bufferLength<4;i++)
{
if(characters[i]=='\0')
break;
if(isspace(characters[i])||characters[i]=='=')
continue;
buffer[bufferLength]=decodingTable[(short)characters[i]];
if(buffer[bufferLength++]==CHAR_MAX)//Illegalcharacter!
{
free(bytes);
returnnil;
}
}

if(bufferLength==0)
break;
if(bufferLength==1)//Atleasttwocharactersareneededtoproduceonebyte!
{
free(bytes);
returnnil;
}

//Decodethecharactersinthebuffertobytes.
bytes[length++]=(buffer[0]<<2)|(buffer[1]>>4);
if(bufferLength>2)
bytes[length++]=(buffer[1]<<4)|(buffer[2]>>2);
if(bufferLength>3)
bytes[length++]=(buffer[2]<<6)|buffer[3];
}

bytes=realloc(bytes,length);
return[NSDatadataWithBytesNoCopy:byteslength:length];
}

/******************************************************************************
函数名称:+(NSString*)base64EncodedStringFrom:(NSData*)data
函数描述:文本数据转换为base64格式字符串
输入参数:(NSData*)data
输出参数:N/A
返回参数:(NSString*)
备注信息:
******************************************************************************/
+(NSString*)base64EncodedStringFrom:(NSData*)data
{
if([datalength]==0)
return@"";

char*characters=malloc((([datalength]+2)/3)*4);
if(characters==NULL)
returnnil;
NSUIntegerlength=0;

NSUIntegeri=0;
while(i<[datalength])
{
charbuffer[3]={0,0,0};
shortbufferLength=0;
while(bufferLength<3&&i<[datalength])
buffer[bufferLength++]=((char*)[databytes])[i++];

//Encodethebytesinthebuffertofourcharacters,includingpadding"="charactersifnecessary.
characters[length++]=encodingTable[(buffer[0]&0xFC)>>2];
characters[length++]=encodingTable[((buffer[0]&0x03)<<4)|((buffer[1]&0xF0)>>4)];
if(bufferLength>1)
characters[length++]=encodingTable[((buffer[1]&0x0F)<<2)|((buffer[2]&0xC0)>>6)];
elsecharacters[length++]='=';
if(bufferLength>2)
characters[length++]=encodingTable[buffer[2]&0x3F];
elsecharacters[length++]='=';
}

return[[NSStringalloc]initWithBytesNoCopy:characterslength:lengthencoding:NSASCIIStringEncodingfreeWhenDone:YES];
}


原文地址:/article/5751717.html

demo下载地址:'target='_blank'>https://github.com/qingjoin/iOSDESEncryptDemo
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: