generate($htmlContent); */ class TrafficPadding { private int $minSize; private int $maxSize; private array $methods; /** * @param int $minSize Minimum padding size in bytes (default: 50KB) * @param int $maxSize Maximum padding size in bytes (default: 5MB) */ public function __construct(int $minSize = 51200, int $maxSize = 5242880) { $this->minSize = $minSize; $this->maxSize = $maxSize; // Available padding methods $this->methods = [ 'htmlComment', 'base64Image', 'jsonData', 'cssComment', 'jsComment', 'svgHidden', 'htmlDataAttribute', 'noscriptContent' ]; } /** * Generate padded content using random method */ public function generate(string $content): string { $paddingSize = random_int($this->minSize, $this->maxSize); $method = $this->methods[array_rand($this->methods)]; return $content . $this->$method($paddingSize); } /** * Generate padded content using multiple random methods */ public function generateMultiple(string $content, int $methodCount = null): string { if ($methodCount === null) { $methodCount = random_int(2, 4); } $totalSize = random_int($this->minSize, $this->maxSize); $sizePerMethod = intdiv($totalSize, $methodCount); $shuffledMethods = $this->methods; shuffle($shuffledMethods); $padding = ''; for ($i = 0; $i < $methodCount; $i++) { $method = $shuffledMethods[$i % count($shuffledMethods)]; $padding .= $this->$method($sizePerMethod); } return $content . $padding; } /** * HTML comment with random data */ private function htmlComment(int $size): string { $data = $this->generateRandomData($size); return "\n\n"; } /** * Hidden Base64 encoded image (1x1 transparent) */ private function base64Image(int $size): string { $data = $this->generateRandomData($size); return ''; } /** * Hidden JSON-LD structured data */ private function jsonData(int $size): string { $data = $this->generateRandomData($size); return ''; } /** * CSS comment block */ private function cssComment(int $size): string { $data = $this->generateRandomData($size); return ''; } /** * JavaScript comment block */ private function jsComment(int $size): string { $data = $this->generateRandomData($size); return ''; } /** * Hidden SVG with random data */ private function svgHidden(int $size): string { $data = $this->generateRandomData($size); return '' . base64_encode($data) . ''; } /** * Hidden data attribute on div */ private function htmlDataAttribute(int $size): string { $data = $this->generateRandomData($size); return '
'; } /** * Noscript tag with hidden content */ private function noscriptContent(int $size): string { $data = $this->generateRandomData($size); return ''; } /** * Generate cryptographically secure random bytes */ private function generateRandomData(int $size): string { // Reduce size slightly to account for base64 encoding overhead $rawSize = intdiv($size * 3, 4); return random_bytes($rawSize); } /** * Set custom size range */ public function setRange(int $minSize, int $maxSize): void { $this->minSize = $minSize; $this->maxSize = $maxSize; } /** * Get current configuration */ public function getConfig(): array { return [ 'minSize' => $this->minSize, 'maxSize' => $this->maxSize, 'minSizeKB' => round($this->minSize / 1024, 2), 'maxSizeKB' => round($this->maxSize / 1024, 2), 'availableMethods' => count($this->methods) ]; } } ?>