• 复杂数组的签名生成方法


    应用环境:服务器需要通过签名验证客户端传过来的数据的合法性

    方法:

    之前在传送数据时尽量不使用复杂的数组(数组里面套数组)的方式,主要是因为对这种数组没有一个好的签名方法,现在我想到使用递归的方法去解决这个问题,还请大家多多指教 。

    具体实现方式:

    1、需要一个对一维数组进行签名的方法,返回为一个字符串。这个方法是基础。

    2、先排序,然后按照数组的key顺序访问数组,临时变量key => value,如果value为数组,对value进行签名并把签名结果作为value的新值,如果value中也有数组,则重复签名并赋值的操作

    3、执行到倒数第二步的时候,整个签名就变成了对一维数组进行签名


    实验步骤:

    php代码:

    <?php
    
    function sig($array)
    {
            $str = '';//实际运行中需要增加一个key用来防止加密方法被破解,我认为这个key可以根据时间戳动态生成
            foreach ( $array as $k => $v ) {
                    if ( is_array($v) ) {
                            $v = sig($v); //递归调用,并把返回值作为当前的key对应的value
                    }
                    $str .= $k.'='.$v.'&';
            }   
            $str = md5($str);//仅仅为了说明原理,所以这里简单的使用了md5方式进行加密,实际环境中需要根据实际情况选择一种或多种加密方法
         echo $str."
    "; //测试用的,用来跟踪递归调用情况。
            return $str;
    }
    
    $array = array(
                    '1',
                    '2',
                    array(
                            'a',
                            'b',
                            'c',
                            array(
                                    'd',
                                    'e',
                                    'a'
                                    ),
                            )
                    );
    
    echo sig($array);

    下面是运行结果:

    562b5cf3b1d346b3978f7c02ab3c0238
    ca8ad73db06f763573a91fa65a8ad833
    2a5d26e5f6db57d8e845c28d1882ea92
    2a5d26e5f6db57d8e845c28d1882ea92

    如果有不当之处还请多多指正哈。

  • 相关阅读:
    广义斐波那契数列 矩阵乘法
    GCD
    [SDOI2008]沙拉公主的困惑 线性筛_欧拉函数_逆元_快速幂
    [SDOI2008]仪仗队 欧拉函数
    洛谷P2617 Dynamic Rankings 主席树 单点修改 区间查询第 K 大
    洛谷P3919 【模板】可持久化数组(可持久化线段树/平衡树)
    Codevs 3269 混合背包
    洛谷P3834 【模板】可持久化线段树 1 主席树
    矩形面积求并 扫描线 + 过不去
    灾后重建 Floyd
  • 原文地址:https://www.cnblogs.com/imoing/p/3311847.html
Copyright © 2020-2023  润新知