$value) { echo " {$key} = {$value}\n"; } echo "\n========================================\n"; echo "✅ 解密成功!\n"; echo "========================================\n"; } catch (\Exception $e) { echo "\n========================================\n"; echo "❌ 解密失败!\n"; echo "========================================\n"; echo "错误信息: " . $e->getMessage() . "\n"; echo "错误行号: " . $e->getLine() . "\n"; echo "错误文件: " . $e->getFile() . "\n"; echo "\n堆栈跟踪:\n" . $e->getTraceAsString() . "\n"; // 额外诊断 echo "\n========================================\n"; echo "诊断信息\n"; echo "========================================\n"; // 检查 BASE64 解码 echo "\n1. BASE64 解码测试:\n"; $base64Decoded = base64_decode($urlDecoded); if ($base64Decoded === false) { echo " ❌ BASE64 解码失败\n"; } else { echo " ✓ BASE64 解码成功\n"; echo " 解码后长度: " . strlen($base64Decoded) . "\n"; echo " 十六进制预览: " . bin2hex(substr($base64Decoded, 0, 32)) . "...\n"; } // 检查私钥格式 echo "\n2. 私钥格式测试:\n"; try { // 格式化私钥 $formattedKey = $privateKey; if (strpos($formattedKey, '-----BEGIN') === false) { $formattedKey = preg_replace('/\s+/', '', $formattedKey); $formattedKey = "-----BEGIN RSA PRIVATE KEY-----\n" . chunk_split($formattedKey, 64, "\n") . "-----END RSA PRIVATE KEY-----\n"; } $keyResource = openssl_pkey_get_private($formattedKey); if ($keyResource === false) { echo " ❌ 私钥格式错误: " . openssl_error_string() . "\n"; } else { echo " ✓ 私钥格式正确\n"; $keyDetails = openssl_pkey_get_details($keyResource); echo " 密钥类型: " . ($keyDetails['type'] === OPENSSL_KEYTYPE_RSA ? 'RSA' : '未知') . "\n"; echo " 密钥位数: " . $keyDetails['bits'] . "\n"; openssl_free_key($keyResource); } } catch (\Exception $e2) { echo " ❌ 私钥检查失败: " . $e2->getMessage() . "\n"; } // 检查数据长度 echo "\n3. 数据长度检查:\n"; if (isset($base64Decoded)) { $dataLen = strlen($base64Decoded); echo " 加密数据长度: {$dataLen} 字节\n"; if (isset($keyDetails)) { $keySize = $keyDetails['bits'] / 8; $blockCount = $dataLen / $keySize; echo " 密钥大小: {$keySize} 字节\n"; echo " 分块数量: " . $blockCount . " (应该是整数)\n"; if ($blockCount != floor($blockCount)) { echo " ⚠️ 警告: 数据长度不是密钥大小的整数倍\n"; } } } }