zoukankan      html  css  js  c++  java
  • 复杂数组的签名生成方法

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

    方法:

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

    具体实现方式:

    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

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

  • 相关阅读:
    Job for vsftpd.service failed because the control process exited with error code
    Linux 调优方案, 修改最大连接数-ulimit
    vsftpd配置文件详解
    Linux下TCP最大连接数受限问题
    vsftp限制FTP用户只能访问自己的目录
    linux YUM常用 命令
    Linux 系统sudo命令
    部分有关 广告联盟作弊 与反作弊资料收集
    Boosted Tree
    如何将数据转换libsvm格式文件
  • 原文地址:https://www.cnblogs.com/imoing/p/3311847.html
Copyright © 2011-2022 走看看