- 请官方大大帮忙看下!官方提供的消息解密失败?提示aes解密失败 ?
对应文档链接:https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/2.0/api/Before_Develop/Message_encryption_and_decryption.html 视频号小店消息加解密 后失败,提示以下错误[图片] 需要解密的内容如下"Encrypt":"MPf8ChGOKzishuARUet72cKUNzPSJwguleaY4PjLOYitoBzq2xrYNn+CTRUGzjm2uMlUWcmo9lSQRbWei8LT7jYon8yhbazmcPILM7AwB3hYIS45LLBocryPWFnYVx9qJghp1ElgA8I/lPJpCP6zrrRGYV0Yp7EmYM+GCsdI/yThuqQqEbgM6y+eAkN/YXl8Idhto6rVzdtdYBGFboqL42ZsuiYlOFqEi/obHRDWQ4K3VxmOMa3sBiQFkrSFTNlbp+ORSG/KT2ViulZEHUbQJzxWzN37b7gt6892u9cI2UwxsE44AgUDgtmB2tCkVsPX7bIghq/IJoudnbEOQBw=="APPID: wxe3847c62a531225d
2023-09-06 - 「基础库2.22.1」AES 加密 在开发者工具不能解密, 其他版本可以解密
2022年3月3日 晚上 7点之前是好的, 下面代码调用 decrypt 开发者工具能解密, 真机不能解密 开发者工具 2.22.1 解密失败 2.22.0 是可以解密成功的 import CryptoJS from "crypto-js"; const Aes = { parse: data => { return CryptoJS.enc.Utf8.parse(data); }, // AES加密 encrypt: data => { const dataStr = JSON.stringify(data); const encrypted = CryptoJS.AES.encrypt(dataStr, Aes.parse(iaweb.key), { iv: Aes.parse(iaweb.iv), mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.ZeroPadding }); return encrypted.toString(); }, // AES解密 decrypt: data => { try { const decrypted = CryptoJS.AES.decrypt(data, Aes.parse(iaweb.key), { iv: Aes.parse(iaweb.iv), padding: CryptoJS.pad.ZeroPadding }); return decrypted.toString(CryptoJS.enc.Utf8); } catch (e) { return data; } } };
2022-03-04 - 使用官方php的获取用户手机号码解密包返回41003 aes 解密失败
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html 是否需要提供session_key, iv, encryptedData 等数据? 后台php代码: public function decry(Request $request) { $sessionKey = $request->input("session_key"); $iv = $request->input("iv"); $encryptedData = $request->input("encrypted_data"); $app_id = $request->input("app_id"); if (!$sessionKey || !$iv || !$encryptedData || !$app_id) { return response()->json([ 'code' => 500, 'message' => 'php端参数缺失', 'data' => "" ]); } $pc = new DecryDataService($app_id, $sessionKey); $errCode = $pc->decryptData($encryptedData, $iv, $data); if ($errCode == 0) { return response()->json([ 'code' => 200, 'message' => '解密成功', 'data' => $errCode ]); } \Log::info("error_code: ".$errCode); return response()->json([ 'code' => 500, 'message' => '解密失败', 'data' => $errCode ]); } DecryDataService 完全使用代码包中的代码未做更改: <?php namespace App\Services; class DecryDataService { /** * error code 说明. * 41001: encodingAesKey 非法 * 41003: aes 解密失败 * 41004: 解密后得到的buffer非法 * 41005: base64加密失败 * 41016: base64解密失败 */ public static $OK = 0; public static $IllegalAesKey = -41001; public static $IllegalIv = -41002; public static $IllegalBuffer = -41003; public static $DecodeBase64Error = -41004; private $appid; private $sessionKey; /** * 构造函数 * @param $sessionKey string 用户在小程序登录后获取的会话密钥 * @param $appid string 小程序的appid */ public function __construct( $appid, $sessionKey) { $this->sessionKey = $sessionKey; $this->appid = $appid; } /** * 检验数据的真实性,并且获取解密后的明文. * @param $encryptedData string 加密的用户数据 * @param $iv string 与用户数据一同返回的初始向量 * @param $data string 解密后的原文 * * @return int 成功0,失败返回对应的错误码 */ public function decryptData( $encryptedData, $iv, &$data ) { if (strlen($this->sessionKey) != 24) { return self::$IllegalAesKey; } $aesKey=base64_decode($this->sessionKey); if (strlen($iv) != 24) { return self::$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 self::$IllegalBuffer; } if( $dataObj->watermark->appid != $this->appid ) { return self::$IllegalBuffer; } $data = $result; return self::$OK; } }
2021-08-30