关于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);
}
}
static int decimalValue(NSString *string)
{
char c1 = (char)[string characterAtIndex:0];
char c2 = (char)[string characterAtIndex:1];
}
(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进制数
}
}
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{
}
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;
}
相关文章推荐
- 网易游戏2016校园招聘笔试题(一)
- 【Unity Shaders and Effects Cookbook】Using Textures for Effects
- 静态方法和静态成员变量和多线程
- Linux下*.tar.gz文件解压缩命令
- 16、ASP.NET MVC入门到精通——MVC过滤器
- 链表-单向链表&&UVa 11988 Broken Keyboard(a.k.a.Beijiu Text)(破损的键盘(悲剧文本))的理解与解析
- H - girl
- DBCC CHECKDB 数据库或表修复
- C语言的整合应用--通讯录的建立
- 献给游戏开发新手的入门概述:怎样模仿出一款《天天酷跑》
- TableViewCell重叠问题的解决办法
- 数组
- A - 最难的一道题
- TCP连接
- 第9周项目4-广义表算法库及应用(1)
- 动画特效十六:网易新闻之“排序删除”效果
- 网易有道离职记
- js调用方法传递变量作为参数的问题
- path和classpath的作用和区别
- translate和left