iOS DES 加密转base64
2013-10-09 16:37
405 查看
//用法加密转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];
}
原文地址:
demo下载地址:
相关文章推荐
- Xcode5 上使用Base SDK iOS6程序和iOS6模拟器
- iOS开发本地缓存(数据离线缓存、读取、释放)
- iOS qq表情(发送信息页面获得表情页面的表情标签)页面之间的跳转
- iOS开发 touch事件的优先级和事件传递
- iOS开发经常用到的技术知识点
- [ios2] 关于CGBitmapContextCreate【转】
- 关于ios内存警告
- Ganglia集成Nagios组合监视企业集群并设置邮件报警
- iOS 输入文字时文本框上移
- iOS7 新后台及下载SDK介绍
- iOS 7 之 Sprites
- iOS培训篇OC之属性介绍
- AFNetworking 库的导入报错问题解决
- iOS编码转换
- iOS地图位置开发
- iOS中MVC的理解
- IOS 设置Launch image停留时间
- iOS控件属性总结
- ios 游戏《魂斗罗》 AL文件素材破解
- 阐明iOS证书和provision文件