Od wersji 7.2 (która została wydana przed kilkoma godzinami), właściwym sposobem jest użycie dodatkowej funkcjonalności zawartej w natywnym kodzie php ZipArchive. (Dzięki abraham-tugalov za wskazanie, że zmiana ta nadchodzi)
Teraz prosta odpowiedź wygląda mniej więcej tak:
<?php
$zip = new ZipArchive();
if ($zip->open('test.zip', ZipArchive::CREATE) === TRUE) {
$zip->setPassword('secret_used_as_default_for_all_files'); //set default password
$zip->addFile('thing1.txt'); //add file
$zip->setEncryptionName('thing1.txt', ZipArchive::EM_AES_256); //encrypt it
$zip->addFile('thing2.txt'); //add file
$zip->setEncryptionName('thing2.txt', ZipArchive::EM_AES_256); //encrypt it
$zip->close();
echo "Added thing1 and thing2 with the same password\n";
} else {
echo "KO\n";
}
?>
Ale można też ustawić metodę szyfrowania przez indeks, a nie imię i nazwisko, i można ustaw każde hasło dla każdego pliku ... oraz określ słabsze opcje szyfrowania, korzystając z tego przykładu, aby wykonać te bardziej złożone opcje.
<?php
$zip = new ZipArchive();
if ($zip->open('test.zip', ZipArchive::CREATE) === TRUE) {
//being here means that we were able to create the file..
//setting this means that we do not need to pass in a password to every file, this will be the default
$zip->addFile('thing3.txt');
//$zip->setEncryptionName('thing3.txt', ZipArchive::EM_AES_128);
//$zip->setEncryptionName('thing3.txt', ZipArchive::EM_AES_192);
//you should just use ZipArchive::EM_AES_256 unless you have super-good reason why not.
$zip->setEncryptionName('thing3.txt', ZipArchive::EM_AES_256, 'password_for_thing3');
$zip->addFile('thing4.txt');
//or you can also use the index (starting at 0) of the file...
//which means the following line should do the same thing...
//but just referencing the text.txt by index instead of name..
//$zip->setEncryptionIndex(1, ZipArchive::EM_AES_256, 'password_for_thing_4'); //encrypt thing4, using its index instead of its name...
$zip->close();
echo "Added thing3 and thing4 with two different passwords\n";
} else {
echo "KO\n";
}
?>
Podstawowym wsparcie dla szyfrowania zip jest włączona ponieważ libzip 1.2.0 wprowadzono wsparcie dla szyfrowania. Musisz więc mieć php 7.2 i libzip 7.2, aby uruchomić ten kod ... Mam nadzieję, że ta uwaga będzie bezpodstawna w tej odpowiedzi "wkrótce"
dziękuję, spróbuję tego. to działa na serwerze linuxowym, więc dodatek nie będzie potrzebny. – Digits
Szyfrowanie ZIP jest w rzeczywistości bardzo słabe, są ataki, które dają działające hasło (jeśli niekoniecznie to samo hasło, które było pierwotnie używane) w stosunkowo krótkim czasie. – bobince
Ta odpowiedź jest czynnie niebezpieczna. Szyfrowanie używane przez tę odpowiedź jest straszliwie słabe. Jest to * nie * nowoczesne szyfrowanie oparte na AES. –