Как извлечь zip-архив в PHP, если файл зашифрован с использованием setEncryptionName - PullRequest
0 голосов
/ 08 ноября 2019

Я создал zip с шифрованием, используя setEncryptionName, следующим образом:

if($zip->open($zip_destination_real,\ZipArchive::CREATE) === TRUE) 
{
  $zip->addFile($filePath_real,'xyz.txt');   
  $zip->setEncryptionName('xyz.txt', \ZipArchive::EM_AES_256, '12345');         
  $zip->close();

}

Теперь, как извлечь этот файл zip? Функция extractTo возвращает false.

$ r = $ zip-> extractTo ($ dir_real);var_dump ($ r);

Я использую php 7.2

Даже когда я вручную извлекаю папку, она запрашивает пароль. Я ввожу 12345 как установлено, но появляется ошибка, сообщающая, что при извлечении произошла ошибкафайлы.

1 Ответ

0 голосов
/ 08 ноября 2019

Вы неправильно установили пароль.

Zip-файлы с паролем:

# Creating new zip object
$zip = new ZipArchive();
if ($zip->open('file.zip', ZipArchive::CREATE) === TRUE) {

    # Setting password here
    $zip->setPassword('12345');

    # Adding some files to zip
    $zip->addFile('some-file.txt');
    $zip->setEncryptionName('some-file.txt', ZipArchive::EM_AES_256);

    # Closing instance of zip object
    $zip->close();

    exit("Done! Your zip is ready!")
} else {
    exit("Whoops:( Failed to create zip.");
}

И распакуйте, как это:

# Creating new ZipArchive instance
$zip = new ZipArchive();

# Open file to read
if ($zip->open('file.zip') === true) {

    # Enter your password
    $zip->setPassword('12345');

    # Extract files to some destination
    # dirname(__FILE__) sets destination to directory of current file
    $zip->extractTo(dirname(__FILE__));

    # Closing instance of zip object
    $zip->close();
}
...