• 问答中心
  1. 登录
  2. 注册
  • 问答首页
  • 最新
  • 推荐
  • 悬赏

有写过百度营销-商业开发者中心-PHP签名加密的吗?

微信截图_20240624000436.png

官方文档地址
官方仅提供了 Java 的 AES 加密示例,PHP 版本的加密匹配不上 (如下);

微信截图_20240624000442.png

有写过的吗?麻烦指导下,谢谢~

2024年06月24日 | 816人阅读
最佳答案
  • 617886698

    1
    等1人赞同

    实际获取 access_token 不需要这一步,回调 url 会有 authCode ,userId

    secretKey 可以在应用管理获取,通过这几个参数就可以获取到 access token

    非要验签的话这个可以

    $params = [

        'appId' => "",

      'authCode' => "",

      'userId' => "",

      'timestamp' => "",

      'state' => "",

    ];

    ksort($params);

    $bytes = base64_encode(json_encode($params));


    $key = substr($secretKey, 0, 16);

    $aec_offset = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";

    function encryptAES_CBC_NoPadding($source, $key, $iv): string

    {

        $dataLength = strlen($source);

     if ($dataLength % 16 != 0) {

            $dataLength = $dataLength + (16 - ($dataLength % 16));

      }

        $source = str_pad($source, $dataLength, "\0", STR_PAD_RIGHT);

      $encrypted = openssl_encrypt($source, 'AES-128-CBC', $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $iv);

     return strtoupper(bin2hex($encrypted));

    }


    echo encryptAES_CBC_NoPadding($bytes, $key, $aec_offset);


    2024年06月24日
    • cloudpeng | 2024年06月24日
      回复
      正解,非常感谢! 我发现自己有三个问题,1. openssl_encrypt 自动补位问题,没想过需要自己手动补位; 2. iv向量就是文档示例的(手动捂脸) 3. 仅用 OPENSSL_RAW_DATA 参数
    • 请先 登录 · 注册

      取消 评论

回答 | 共 4 个
按点赞量排序
  • VirtualStar

    0
    等人赞同

    补码尽然是 zeropadding,第一次见不是用 pkcs7padding 的 :grin:
    不过楼主的写法错误地方有些多啊:grinning:

    2024年06月24日
    • 星尘漫舞 | 2024年06月24日
      回复
      对加密和JAVA不了解,没从JAVA看出来PHP的实现 只放出了其中一次错误截图,更多的没敢放
    • 查看更多

      请先 登录 · 注册

      取消 评论

游客

^-^我来说两句,请先 登录 · 注册
发表回答

鑫坤机电

热门帖子
周榜 | 总榜

  • 1
    同一个站点如何设置电脑端是www.XXX.com 手机端是m.XXX.com
  • 2
    当网站配置好https协议之后 全站url http怎么跳转到https
  • 3
    EyouCms去除URL中的index.php
  • 4
    这是一个有回答但未解决的问题
  • 5
    这是一个没有人回答的问题
  • 6
    有写过百度营销-商业开发者中心-PHP签名加密的吗?
  • 7
    开发时的缓存问题如何解决?(opcache问题)
  • 8
    TP5.1 php新手求助:路由只有首页可以访问,其他页面都是404