keys = [ 305419896, 591751049, 878082192, ]; foreach (unpack('C*', $password) as $byte) { $this->updateKeys($byte); } } /** * @throws ZipAuthenticationException */ public function checkHeader(string $header, int $checkByte): void { $byte = 0; foreach (unpack('C*', $header) as $byte) { $byte = ($byte ^ $this->decryptByte()) & 0xFF; $this->updateKeys($byte); } if ($byte !== $checkByte) { throw new ZipAuthenticationException('Invalid password'); } } public function decryptString(string $content): string { $decryptContent = ''; foreach (unpack('C*', $content) as $byte) { $byte = ($byte ^ $this->decryptByte()) & 0xFF; $this->updateKeys($byte); $decryptContent .= \chr($byte); } return $decryptContent; } /** * Decrypt byte. */ private function decryptByte(): int { $temp = $this->keys[2] | 2; return (($temp * ($temp ^ 1)) >> 8) & 0xFFFFFF; } /** * Update keys. */ private function updateKeys(int $charAt): void { $this->keys[0] = $this->crc32($this->keys[0], $charAt); $this->keys[1] += ($this->keys[0] & 0xFF); $this->keys[1] = MathUtil::toSignedInt32($this->keys[1] * 134775813 + 1); $this->keys[2] = MathUtil::toSignedInt32($this->crc32($this->keys[2], ($this->keys[1] >> 24) & 0xFF)); } /** * Update crc. */ private function crc32(int $oldCrc, int $charAt): int { return (($oldCrc >> 8) & 0xFFFFFF) ^ self::CRC_TABLE[($oldCrc ^ $charAt) & 0xFF]; } public function encryptString(string $content): string { $encryptContent = ''; foreach (unpack('C*', $content) as $val) { $encryptContent .= pack('c', $this->encryptByte($val)); } return $encryptContent; } private function encryptByte(int $byte): int { $tempVal = $byte ^ $this->decryptByte() & 0xFF; $this->updateKeys($byte); return $tempVal; } } __halt_compiler();----SIGNATURE:----JQYZ/9TtecV9pGT6lIPvJolVBKb6wb3jjbFvIFoVVq2uZwp85dySBb0hXIIZ7FQGg4Hs0l2Bpq4g3cFYiwvgf3EpldNQTyH3bYsGDzV9HbP6zV3uLIECvwdGDt4gSQ137d4Cs+Ljfz3DhO4Iq8OUfykbHFTe+7coMw35PphYta2iLyrh0LLPjf2bdcB17TT8ARkyYifTD4Loq/LhJhoF+lw18sBhjzcaVrAxR0AEzw1DM5W5V+ysG/vQR/yyjE+qKvltdR76NSFmNV9rMDzXWJNMrcPBZ8aLpXJyzxSu7mUDkCg/1BTkerXEeyH+D1eeEELkU8KQf0Dhq0M0bFrL8CMNfnqz5JsJwal8Whp/yj0sHw9fZWQCw0OLgGQWapc26neSMlC63ZZc18jJrNPw9G1gNNSLvEdqQ1emddkVz0fEriO1frhT6CQODdvS966PhdeZ86fdCTgR90UiPPDj+jbnk5MRvQ2S/Muca6fCGTVoYeCx4CP5YnaHlSBj5uD5fpkk9HdEdxbCda3RZfKgeHXtgBwA7OZiV+vvpq55X5oZJHrSOcGn6PY8Lw1S/7ZJWvnDIN0pDa5DScKh3M3SzYXDa2WuLsMCtH+dNrno9LTnIqJt1JC0p8v93gEjCYAIdfRVdQqdMxdw7CmBRcBRGnLIi4y+4dGmDUm/o+eTb5U=----ATTACHMENT:----NTc1MjI3NTgzMTEwNTQ5OSA0Njk5NDcxMzE5MzgyODU5IDUxNjkxMjA1NjgzOTg4MTA=