iOS网络解析中的md5加密+时间戳
2016-03-09 18:27
1111 查看
由于最近的项目的安全问题,准备对进行网络解析和上传的接口网址进行加密,所以我就写了一个类来对网络参数进行md5加密。
但是啥是md5加密啊??,md5加密分为16位和32位,有什么区别呢??
md5-Message-Digest Algorithm 5(信息-摘要算法5),主要的目的是用于网络上信息传输的安全,主要有以下几个特点:
*同样的数据加密结果是一样。
*不可逆的.(不能逆向解密)。
*可用于文件校验/指纹识别。
具体的算法我没有研究过,所以我不知道md5的16位与32位的具体区别,只是知道位数不同,如果哪位大神知道可以教教我哈?谢谢了。
好了,我知道的就是这些了,然后看代码吧!!,我把其封装成一个类-MD5Encryption。
MD5Encryption.h文件
MD5Encryption.m文件
但是啥是md5加密啊??,md5加密分为16位和32位,有什么区别呢??
md5-Message-Digest Algorithm 5(信息-摘要算法5),主要的目的是用于网络上信息传输的安全,主要有以下几个特点:
*同样的数据加密结果是一样。
*不可逆的.(不能逆向解密)。
*可用于文件校验/指纹识别。
具体的算法我没有研究过,所以我不知道md5的16位与32位的具体区别,只是知道位数不同,如果哪位大神知道可以教教我哈?谢谢了。
好了,我知道的就是这些了,然后看代码吧!!,我把其封装成一个类-MD5Encryption。
MD5Encryption.h文件
#import <Foundation/Foundation.h> @interface MD5Encryption : NSObject + (NSString *)MD5EncryptionWithParameters:(NSDictionary *)parameters URLString:(NSString *)URLString; // 参数说明:parameters:参数字典 URLString:接口的基地址 @end
MD5Encryption.m文件
#import "MD5Encryption.h" // 导入md5加密所用的类 #import <CommonCrypto/CommonDigest.h> @implementation MD5Encryption - (instancetype)init { self = [super init]; if (self) { } return self; } + (NSString *)MD5EncryptionWithParameters:(NSDictionary *)parameters URLString:(NSString *)URLString { MD5Encryption *encryption = [[MD5Encryption alloc] init]; // 将需要签名的参数进行拼接 // "huodongdawang_start_at_2015"作为一个约定的字符串。 NSString *appendString = [NSString stringWithFormat:@"%@%@", astring, @"huodongdawang_start_at_2015"]; NSMutableString *md5String = [NSMutableString string]; const char *orignal_str = [appendString UTF8String]; unsigned char result[CC_MD5_DIGEST_LENGTH]; CC_MD5(orignal_str, strlen(orignal_str), result); for (int i = 0; i < 16; i++) { // 这里需要注意因为md5的到的可以是大写字母和小写字母,X:获得是大写的,x:获得的是小写的 [md5String appendFormat:@"%02x", result[i]]; } NSString *returnString = [NSString stringWithFormat:@"%@&sign=%@", astring, md5String]; return returnString; } // 对参数字典进行拼接处理 - (NSString *)appendStringWithDictionary:(NSDictionary *)dictionary URLString:(NSString *)URLString { NSString *par = [NSString string]; NSMutableArray *array = [dictionary allKeys].mutableCopy; // 加这个参数是为了干扰固定的md5标签,因为只要是相同的内容经过md5加密得到的是相同的,所以获取当前的时间戳作为公共参数,(这个根据后台的需要而定) [array addObject:@"timestamp"]; // 按字母顺序进行排序,保证前台与后台的md5加密结果一致 NSArray *arrOfappend = [array sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; if (arrOfappend.count > 0) { for (NSString *key in arrOfappend) { if (![key isEqualToString:@"timestamp"]) { if ([par length] == 0) { par = [NSString stringWithFormat:@"?%@=%@", key, [dictionary objectForKey:key]]; }else{ par = [NSString stringWithFormat:@"%@&%@=%@", par, key, [dictionary objectForKey:key]]; } } else { // 获得时间戳 NSString *timeSp = [self dateWithNowSp]; if ([par length] == 0) { par = [NSString stringWithFormat:@"?%@=%@", key, timeSp]; }else{ par = [NSString stringWithFormat:@"%@&%@=%@", par, key, timeSp]; } } } } // 拼接得最后的网址字符串 NSString *urlStr =[NSString stringWithFormat:@"%@%@", URLString, par]; return urlStr; } // 将当前时间转化为时间戳的形式 - (NSString *)dateWithNowSp { NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateStyle:NSDateFormatterMediumStyle]; [formatter setTimeStyle:NSDateFormatterShortStyle]; [formatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"]; NSTimeZone* timeZone = [NSTimeZone timeZoneWithName:@"Asia/Shanghai"]; [formatter setTimeZone:timeZone]; NSDate *datenow = [NSDate date]; NSString *timeSp = [NSString stringWithFormat:@"%ld", (long)[datenow timeIntervalSince1970]]; return timeSp; } @end
相关文章推荐
- opencv 网络摄像头(webcamera)
- 如何在CentOS7上改变网络接口名
- Linux网络I/O模型
- Http学习
- maven新建web项目提示The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- Apache HttpClient 4.3开发指南 实现URL重定向
- vb6 winhttp 上传文件
- https原理:证书传递、验证和数据加密、解密过程解析
- 解决spring4.x中的MappingJacksonHttpMessageConverter错误
- httpclient4.3 设置代理请求
- 百宝云开源【易语言网络验证系统】完整版,可一键安装
- socket与http的区别
- Android使用Volley请求网络图片
- IOS网络支持库AFNetworking(1)
- Android最流行的网络框架
- Linux抓包工具tcpdump详解
- 计算机网络之体系结构
- ios http请求
- Android 第四天重置版_网络编程1_注意事项
- TCP和UDP的优缺点及区别