iOS HmacSHA1加密 和 MD5 Base64加密 --iOS开发系列---项目中成长的知识五

项目中开发中需要对一些数据进行加密后和服务器验证是否是我们客户端发出的请求!

方案是服务器定的,使用HmacSHA1加密和MD5 Base64加密

加密过程比较复杂

1.获取格林威治时间

2.用base64编码对请求数据内容进行MD5值计算

3.设置请求格式

4.设置鉴权信息,需要对上面的3个内容以及请求的链接 进行HMacSHA1再次进行加密

加密过后把上面4步获得的值加入到http的请求头中,一并发送给服务器,服务器经过验证后,才返回给我们我们想要的信息

下面贴代码说明我们使用的两个加密

首先是Base 64 MD5加密

 1 //BASE 64 MD5加密
 2
 3 + (NSString *)getMd5_32Bit_String:(NSString *)srcString{
 4     const char *cStr = [srcString UTF8String];
 5     unsigned char result[16];
 6     CC_MD5( cStr, strlen(cStr), result );
 7     NSData *data = [NSData dataWithBytes:result length:CC_MD5_DIGEST_LENGTH];
 8     data = [GTMBase64 encodeData:data];
 9     NSString * base64String = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
10     return base64String;
11 }

其次是HmacSHA1加密

 1 //HmacSHA1加密
 2 +(NSString *)Base_HmacSha1:(NSString *)key data:(NSString *)data{
 3     const char *cKey  = [key cStringUsingEncoding:NSASCIIStringEncoding];
 4     const char *cData = [data cStringUsingEncoding:NSASCIIStringEncoding];
 5     //Sha256:
 6     // unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];
 7     //CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
 8
 9     //sha1
10     unsigned char cHMAC[CC_SHA1_DIGEST_LENGTH];
11     CCHmac(kCCHmacAlgSHA1, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
12
13     NSData *HMAC = [[NSData alloc] initWithBytes:cHMAC
14                                           length:sizeof(cHMAC)];
15
16     //将加密结果进行一次BASE64编码。
17     NSString *hash = [HMAC base64EncodedStringWithOptions:0];
18     return hash;
19 }

Base64 需要用到一个库:GTMBase64

HmacSHA1加密需要用到的库是:CommonCryptor

时间: 2024-08-07 17:00:48

iOS HmacSHA1加密 和 MD5 Base64加密 --iOS开发系列---项目中成长的知识五的相关文章

iOS dateformatter设置GMT格式时间--iOS开发系列---项目中成长的知识四

今天在项目中开始接手客户端的签名这个模块,签名这个会在项目结束过后再单独写一下自己的心得! 今天讲讲在签名的过程中我们需要向服务器传送一个Date值,格式要求是格林威治时间,也就是GMT时间! 格式要求是 22 Oct 2015 10:20:35 GMT 而我通过[NSDate Date]获取到的格式是2015-10-22 10:20:35 所以就上网搜寻答案 说的是通过[NSDate Date]这个获取到的时间就是GMT地区的,所以我就觉得是转格式的地方出问题了 但是经过一番尝试后,无论是转格

设置tableview的滚动范围--iOS开发系列---项目中成长的知识三

设置tableview的滚动范围 有时候tableview的footerview上的内容需要向上拖动界面一定距离才能够看见, 项目中因为我需要在footerviw上添加一个按钮,而这个按钮又因为这个原因点不中,所以找到了解决办法! 添加如下方法即可 -(void)scrollViewDidScroll:(UIScrollView *)scrollView { self.tableView.contentSize = CGSizeMake(0,MZT_SCREEN_HEIGHT); }

把所有界面的状态栏字体颜色设置为白色--iOS开发系列---项目中成长的知识一

第一步: 在info.plist中 View controller-based status bar appearance这个属性设置为 View controller-based status bar appearance =NO 这个意思是:View Controller 不对status Bar 显示进行操作 第二步: 由于项目是一个以tabbarController的父类进行开发的;所以在这个父类里面添加如下方法: [[UIApplication sharedApplication] s

iOS 导航栏遮挡问题 --- iOS开发系列 ---项目中成长的知识七

不知大家有没有遇见过自己写的tableview被导航栏遮挡住的问题,反正我是遇见过! 因为在ios7以后所有的UIViewController创建后默认就是full Screen的,因此如果带导航栏的应用界面中的部分控件会被导航栏覆盖掉. 解决方案:可以使用ios7中的UIViewController新增的属性extendLayoutIncludesOpaqueBars和edgesForExtendedLayout来解决. extendLayoutIncludesOpaqueBars指定了当ba

登陆验证前对用户名和密码加密之后传输数据---base64加密

以下这种方法是加密传输的简单实现 1,base64.js /** * * Base64 encode / decode * * */ function Base64() { // private property _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; // public method for encoding this.encode = function (input

iOS开发系列--C语言之基础知识

概览 当前移动开发的趋势已经势不可挡,这个系列希望浅谈一下个人对IOS开发的一些见解,这个IOS系列计划从几个角度去说IOS开发: C语言 OC基础 IOS开发(iphone/ipad) Swift 这么看下去还有大量的内容需要持续补充,但是今天我们从最基础的C语言开始,C语言部分我将分成几个章节去说,今天我们简单看一下C的一些基础知识,更高级的内容我将放到后面的文章中. 今天基础知识分为以下几点内容(注意:循环.条件语句在此不再赘述): Hello World 运行过程 数据类型 运算符 常用

(iOS)Base64加密和DES加密、以及JAVA和iOS中DES加密统一性问题

我们在项目中为了安全方面的考虑,通常情况下会选择一种加密方式对需要安全性的文本进行加密,而Base64加密和DES64加密是常用的加密算法.我记得我在前一个项目中使用的就是这两种加密算法的结合:Base64 + DES加密.当然这需要移动端和后台服务器做一个统一. 1.Base64加解密 值得一提的是:apple提供了基础的Base64加解密算法.这样我们就可以直接使用方法去实现Base64加解密.先看一下apple都提供了哪些方法: @interface NSData (NSDataBase6

C# 加密解密(DES,3DES,MD5,Base64) 类

原文:C# 加密解密(DES,3DES,MD5,Base64) 类 保存! public sealed class EncryptUtils { #region Base64加密解密 /// <summary> /// Base64加密 /// </summary> /// <param name="input">需要加密的字符串</param> /// <returns></returns> public sta

字符串base64加密、解密

//base64加密(字符串经过base64加密之后得到的新的字符串)NSData *data = [@"iOS Developer Tips" dataUsingEncoding:NSUTF8StringEncoding]; NSString *base64Encoded = [data base64EncodedStringWithOptions:0]; //base64解密(base64加密的字符串经过base64解密之后得到的新的字符串) NSData *nsdataDecod