收藏
回答

wx.getUserInfo 获取的加密数据解密 乱码

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug wx.getUserInfo 工具 6.6.6 1.9.94

wx.getUserInfo 获取的加密数据解密 乱码


解密代码用的官方 稍微修改了下


if (strlen($this->sessionKey) != 24) {

//return ErrorCode::$IllegalAesKey;

return "";

}

$aesKey = base64_decode($this->sessionKey);


        

if (strlen($iv) != 24) {

//return ErrorCode::$IllegalIv;

return "";

}

$aesIV=base64_decode($iv);


$aesCipher=base64_decode($encryptedData);


$result = openssl_decrypt( $aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV);

return $result;



解密结果就是

回答关注问题邀请回答
收藏

11 个回答

  • Y!an
    Y!an
    2018-05-06

    这一行看起来很有问题:

    $result = openssl_decrypt( aesKey, 1, $aesIV);


    1. aesKey 这里看起来是个常量,但是你的代码似乎没有(也不应该)定义 aesKey 这个常量,这里应该改成 $aesKey 这个变量

    2. openssl_decrypt() 也用错了,PHP 官方文档里 openssl_decrypt() 的介绍如下:

      string openssl_decrypt ( string $data , string $method , string $key [, int $options = 0 [, string $iv = "" [, string $tag = "" [, string $aad = "" ]]]] )
      解释一下,第一个参数 $data 是密文,即 $aesCipher;第二个参数 $method 是加/解密算法名,微信采用的是 AES-128-CBC;第三个参数 $key 是加解密用到的密钥,即 $aesKey;后面几个是可选参数,$options 加密的选项,这里该传 OPENSSL_RAW_DATA,即 1;$iv 是初始向量,即 $aesIV


    所以你应该是这样写:

    $result = openssl_decrypt($aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV);


    2018-05-06
    有用
    回复

正在加载...

登录 后发表内容