分享

PHP正则按照从大到小的SIGN签名算法

 董小宝的日常 2021-08-15

<?php

/**

 * 签名算法

 * @param unknown $key_id S_KEY(商户KEY)

 * @param unknown $array 例子:$array = array('amount'=>'1.00','out_trade_no'=>'2018123645787452');

 * @return string

* @作者 https://www.

 */

function sign ($key_id, $array)

{

    $data = md5(sprintf("%.2f", $array['amount']) . $array['out_trade_no']);

    $key[] ="";

    $box[] ="";

    $pwd_length = strlen($key_id);

    $data_length = strlen($data);

    for ($i = 0; $i < 256; $i++)

    {

        $key[$i] = ord($key_id[$i % $pwd_length]);

        $box[$i] = $i;

    }

    for ($j = $i = 0; $i < 256; $i++)

    {

        $j = ($j + $box[$i] + $key[$i]) % 256;

        $tmp = $box[$i];

        $box[$i] = $box[$j];

        $box[$j] = $tmp;

    }

    for ($a = $j = $i = 0; $i < $data_length; $i++)

    {

        $a = ($a + 1) % 256;

        $j = ($j + $box[$a]) % 256;

        $tmp = $box[$a];

        $box[$a] = $box[$j];

        $box[$j] = $tmp;

        $k = $box[(($box[$a] + $box[$j]) % 256)];

        $cipher .= chr(ord($data[$i]) ^ $k);

    }

    return md5($cipher);

}

?>

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约