private function fileEncrypt($filename, $realname, RSA $rsa) { // Генерируем имя рабочей директории $workdir = sys_get_temp_dir() . '/' . md5(RSA::bcrand('0', '9999999999999999999999') . date('-Y-m-d-H-i-s')); mkdir($workdir); // Создаем рабочую директорию // Читаем файл $f = fopen($filename, 'rb'); $file = fread($f, filesize($filename)); fclose($f); // Шифруем файл $file = $rsa->encrypt($file); // Записываем файл в рабочую директорию file_put_contents($workdir . '/file', $file); // Генерируем информацию о зашифрованном файле $finfo = $rsa->encrypt(base64_encode(json_encode(['name' => $realname, 'size' => filesize($filename), 'signature' => '++++'], JSON_FORCE_OBJECT))); // Записываем зашифрованную информацию о файле file_put_contents($workdir . '/info', $finfo); // Сохраняем все в ZIP архив (зашифрованный файл и зашифрованный файл с описанием исходного файла) $zip = new \ZipArchive(); $zipname = $workdir . '.zip'; $zip->open($zipname, \ZipArchive::CREATE); $zip->addFile($workdir . '/file', 'file'); $zip->addFile($workdir . '/info', 'info'); $zip->close(); $filename = $zipname; // Удаляем временные файлы unlink($workdir . '/file'); unlink($workdir . '/info'); rmdir($workdir); return $zipname; }