zoukankan      html  css  js  c++  java
  • api 签名算法

    <?php
    
    
    define('token', 'tokensecret'); //  定义私钥token 
    /**
     * 哈希验证签名
     */
    function hmacSign($array, $token) {
        if (isset($array['sign'])) {
            $orig_sign = $array['sign'];
            unset($array['sign']);
        } else {
            print_r([1000, '签名错误']);
        }
        ksort($array);
        $requestString = '';
    
        foreach ($array as $k => $v) {
                  $requestString .= $k . '=' . urlencode($v);   //  编码转换问题
        }
        $newSign = hash_hmac("md5", strtolower($requestString), $token);  // 生成服务器端签名规则  $requestString 全部转换为小写 进行加密
        // 生成签名进行判断
        if ($orig_sign != $newSign) {   //  验证码签名 
            print_r([1000, '签名错误.']);
        }else{
             echo '签名成功';
        }
    }
    
    
    /**
     *  date 接收的数组
     */
    $data = [
        'time' => '1523002001',
        'DId' => '2320200012',
        'appid' => '12547412589',  
    ];
    
    /**
     * 服务器验证
     */
    
    $sig = $data;
    $sig['sign'] ='50d1b37fb9c1ac08eb6c20acc5266558';  //  js 生成sign
    $a = hmacSign($sig, token);
    
    ?>
    <!-- MD5.js -->
      <script src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.js"></script>
    <script>
    
        var postData =<?php echo json_encode($data); ?>;
        var token ='<?php echo token; ?>';
        /**
         * json 排序 
         * 先排序再toLower,所以Did 在appid 之前
         */
        function jsonSort(jsonObj) {
            let arr = [];
            for (var key in jsonObj) {
                arr.push(key)
            }
            arr.sort();
            let str = '';
            for (var i in arr) {
                str += arr[i].toLowerCase() + "=" + encodeURI(jsonObj[arr[i]]).toLowerCase();   // value 先进行encodeURL 在转换为小写
            }
            return str
        }
    
        strData = jsonSort(postData);
        var sign = md5(strData, token);
        postData['sign'] = sign;
        console.log(postData);
    
    </script>
    

      

  • 相关阅读:
    编译和和运行amor
    用好C语言的中库,系统错误的处理
    C语言中的宏
    时隔多年,再次实现的链表
    脚本更改桌面背景
    python爬虫 一个security的RSA加密爬虫
    mysql 8.0版本
    mysql5.7的并行复制
    kinshard中间件问题
    Springboot2-@Transactional 事务不生效
  • 原文地址:https://www.cnblogs.com/yanyanyanyanliu/p/9340448.html
Copyright © 2011-2022 走看看