php解密小程序sessionKey 的方法

小程序获取用户信息,需要先拿到code 然后再获取用户信息,再用户同意获取信息后,小程序会返回session_key 等相关信息,需要注意的是session_key 是需要解密才能获取到用户的相关信息的,小程序代码我就不放出来了,今天主要介绍一下php是如何解密的

小程序获取用户信息,需要先拿到code 然后再获取用户信息,再用户同意获取信息后,小程序会返回session_key 等相关信息,需要注意的是session_key 是需要解密才能获取到用户的相关信息的,小程序代码我就不放出来了,今天主要介绍一下php是如何解密的

微信小程序解密

/**
 * 检验数据的真实性,并且获取解密后的明文.
 * @param  string  $appid  小程序id
 * @param  string  $sessionKey 小程序密钥
 * @param  string  $encryptedData 在小程序中获取的encryptedData
 * @param  string  $iv 在小程序中获取的iv
 * @return array 成功0,失败返回对应的错误码
 */
function decryptData($encryptedData, $iv, $appid , $sessionKey)
{
    $OK = 0;
    $IllegalAesKey = -41001;
    $IllegalIv = -41002;
    $IllegalBuffer = -41003;
    $DecodeBase64Error = -41004;
    if (strlen($sessionKey) != 24) {
        return $IllegalAesKey;
    }
    $aesKey = base64_decode($sessionKey);
    if (strlen($iv) != 24) {
        return $IllegalIv;
    }
    $aesIV = base64_decode($iv);
    $aesCipher = base64_decode($encryptedData);
    $result = openssl_decrypt($aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV);
    $dataObj = json_decode($result);
    if ($dataObj == NULL) {
        return $IllegalBuffer;
    }
    if ($dataObj->watermark->appid != $appid) {
        return $IllegalBuffer;
    }
    return $result;
}

百度小程序

/**
 * 数据解密:低版本使用mcrypt库(php < 5.3.0),高版本使用openssl库(php >= 5.3.0)。
 *
 * @param string $ciphertext 待解密数据,返回的内容中的data字段
 * @param string $iv 加密向量,返回的内容中的iv字段
 * @param string $app_key 创建小程序时生成的app_key
 * @param string $session_key 登录的code换得的
 * @return string | false
 */
function decrypt($ciphertext, $iv, $app_key, $session_key)
{
    $session_key = base64_decode($session_key);
    $iv = base64_decode($iv);
    $ciphertext = base64_decode($ciphertext);

    $plaintext = false;
    if (function_exists("openssl_decrypt")) {
        $plaintext = openssl_decrypt($ciphertext, "AES-192-CBC", $session_key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $iv);
    } else {
        $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, null, MCRYPT_MODE_CBC, null);
        mcrypt_generic_init($td, $session_key, $iv);
        $plaintext = mdecrypt_generic($td, $ciphertext);
        mcrypt_generic_deinit($td);
        mcrypt_module_close($td);
    }
    if ($plaintext == false) {
        return false;
    }

    // trim pkcs#7 padding
    $pad = ord(substr($plaintext, -1));
    $pad = ($pad < 1 || $pad > 32) ? 0 : $pad;
    $plaintext = substr($plaintext, 0, strlen($plaintext) - $pad);

    // trim header
    $plaintext = substr($plaintext, 16);
    // get content length
    $unpack = unpack("Nlen/", substr($plaintext, 0, 4));
    // get content
    $content = substr($plaintext, 4, $unpack['len']);
    // get app_key
    $app_key_decode = substr($plaintext, $unpack['len'] + 4);

    return $app_key == $app_key_decode ? $content : false;
}

以上这篇php解密小程序sessionKey 的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持芦苇派。

原创文章,作者:ECHO陈文,如若转载,请注明出处:https://www.luweipai.cn/php/1620699555/

  • 0