zoukankan      html  css  js  c++  java
  • object-c实现的 在PHP中oauth加密算法

    说起这个算法,在php中我是这么实现的

    function generateSig ($params, $secret = '')
    {
        if (empty($secret)) {
            $secret = $this->appSecret;
        }
        $str = '';
        ksort($params);
        foreach ($params as $k => $v) {
            if (! is_array($v)) {
                $str .= "$k=$v";
            } else {
                ksort($v);
                $str .= "$k=" . json_encode($v);
            }
        }
        return bin2hex(hash_hmac('sha1', $str, $secret, TRUE));
    }

    那么在ios的应用中,应该如何实现呢,纠结了半天,其实是很简单的,只是自己错把secret放进了加密数据中,导致结果出现问题。下面展示一下自己的object-c在ios中的实现过程。

    + (NSString *)getSignature:(NSDictionary *)parameters secret:(NSString *)secret
    {
        NSMutableString *baseString = [[NSMutableString alloc] init];
        //排序
        NSArray *sortArray = [parameters.allKeys sortedArrayUsingSelector:@selector(compare:)];
        for(NSString *key in sortArray)
        {
            NSString *value = [parameters objectForKey:key];
            if(value && [value isKindOfClass:[NSString class]])
            {
                [baseString appendFormat:@"%@=%@", key, value];
            }
        }
        
        const char *cKey  = [secret cStringUsingEncoding:NSUTF8StringEncoding];
        const char *cData = [baseString cStringUsingEncoding:NSUTF8StringEncoding];
        
        uint8_t cHMAC[CC_SHA1_DIGEST_LENGTH];
        
        CCHmac(kCCHmacAlgSHA1, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
        
        NSString *hash;
        NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
        for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)
            [output appendFormat:@"%02x", cHMAC[i]];
        hash = output;
        return hash;
    }

    在这里不能缺少的库是

    #import <CommonCrypto/CommonDigest.h>
    #import <CommonCrypto/CommonHMAC.h>

    应该是下面这个,如果使用到MD5,上面那个是不能缺少的

  • 相关阅读:
    【7.19 graphshortestpath graphallshortestpaths函数】matlab 求最短路径函数总结
    【7.18 灾情巡视路线代码】
    【7.18总结】KM算法
    【7.17总结】 匈牙利算法(二分图最大匹配)
    动态规划 多段图最短路 有向图
    matlab 单元最短路 Dijkstra算法 无向图
    hdu 3536【并查集】
    博弈随笔
    AtCoder Regular Contest 094 D Worst Case【思维题】
    CODE FESTIVAL 2017 qual B C 3 Steps(补题)
  • 原文地址:https://www.cnblogs.com/DoNetCShap/p/5076215.html
Copyright © 2011-2022 走看看