您的位置:首页 > 其它

关于md5 Des Base64 加密处理 在项目中遇到的问题终结

2015-11-01 11:50 429 查看
对于在iOS,对数据进行加密时,遇到加密出来的数据和安卓端加密处理后的数据不一样的问题,首先找到加密时,错误出现在那一步,在处理数据时,需不需要对数据另外的处理,例如:在md5 加密后 需不需要对数据进行

static int hexChar2int(char c)

{

int value = c;

if (isalpha(c)) {

char lowerC = tolower(c);

value = 10 + (lowerC - ‘a’);

} else {

value = atoi(&c);

}

return value;


}

static int decimalValue(NSString *string)

{

char c1 = (char)[string characterAtIndex:0];

char c2 = (char)[string characterAtIndex:1];

int result = 0;
result = hexChar2int(c1) * 16 + hexChar2int(c2);
return result;


}

(NSData )dataFromHexString:(NSString )hexStr

{

if (hexStr.length % 2) {

NSLog(@”Error: String Format”);

return nil;

}

int count = (int)hexStr.length/2;

char hexDataArr[count];

for (int i = 0; i < count; i++) {

NSRange range = NSMakeRange(i*2, 2);

NSString *subStr = [hexStr substringWithRange:range];

hexDataArr[i] = decimalValue(subStr);

}

NSData *data = [NSData dataWithBytes:hexDataArr length:count];

return data;

}

以上代码是 把数据进行 字符串转换为NSData 的处理后再进行Base64 的加密,在对数据进行处理后 中间是否用到:

(NSString )hexStringFromString:(NSString )string{

NSData myD = [string dataUsingEncoding:NSUTF8StringEncoding]; Byte *bytes = (Byte )[myD bytes]; //下面是Byte 转换为16进制。

NSString *hexStr=@ “” ;

for ( int i= 0 ;i<[myD length];i++)

{

NSString *newHexStr = [NSString stringWithFormat:@ “%x” ,bytes[i]& 0xff ]; ///16进制数

if ([newHexStr length]== 1){

hexStr = [NSString stringWithFormat:@ "%@0%@" ,hexStr,newHexStr];

}
else{

hexStr = [NSString stringWithFormat:@ "%@%@" ,hexStr,newHexStr];


}

}

return hexStr;

}对数据进行字符串转换十六进制的数;

也要考虑数据的大小写,如果是小写可以用

:NSString *zhuanma = [zhuan uppercaseString];

转换为大写

然后再进行数据的处理

URLencode对请求的 数据进行的加密比较的简单只需要引入响应的方法就可以实现加密的效果

附:

base64 加密的方法:

+ (NSString*)encodeBase64String:(NSString * )input {

NSData *data = [input dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];

data = [GTMBase64 encodeData:data];

NSString *base64String = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

return base64String;

}

+ (NSString*)decodeBase64String:(NSString * )input {

NSData *data = [input dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];

data = [GTMBase64 decodeData:data];

NSString *base64String = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

return base64String;

}

+ (NSString*)encodeBase64Data:(NSData *)data {

data = [GTMBase64 encodeData:data];

NSString *base64String = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

return base64String;

}

+ (NSString*)decodeBase64Data:(NSData *)data {

data = [GTMBase64 decodeData:data];

NSString *base64String = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

return base64String;

}

URLencode的加密方法

(NSString*)encodeString:(NSString*)unencodedString{

// CharactersToBeEscaped = @":/?&=;+!@#$()~',*";
// CharactersToLeaveUnescaped = @"[].";

NSString *encodedString = (NSString *)
CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)unencodedString,
NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8));

return encodedString;


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: