zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    让服务器iis支持.apk文件下载的设置方法
    找不到匹配控制器
    Session_Start
    在SQLSERVER中创建聚集索引
    nvm 安装
    web访问命令行
    devmapper: Thin Pool has 162394 free data blocks which is less than minimum required 163840 free data blocks. Create more free space in thin pool or use dm.min_free_space option to change behavior
    服务器使用赛风
    java jpa 报错
    ssh 设置反向代理
  • 原文地址:https://www.cnblogs.com/WayneLiu/p/4925170.html
Copyright © 2011-2022 走看看