AHS-Soft ® :: Нейро-программирование :: Синапсы: Роена, Альдера, Нонжена
AHS-SOFT

AHS-SOFT


Автор поста AHSSOFT

Создаём зашифрованный RAR архив на PHP

15.01.2019 AHSSOFT Поделиться... 0 5.0/5.0 (2)

Создаём зашифрованный RAR архив на PHP

Часто, в веб-проектах необходимо создавать rar архив с паролем, в котором зашифрован список файлов и папок внутри него. Многие программисты не знают, как реализовать управление таким архивом на языке php, но мы придём им на помощь, и покажем, как создать и управлять "раром" на php. Библиотека из PECL (php_rar) позволяет лишь распаковывать файлы из архива, мы же научим вас упаковывать (архивировать) файлы в rar на php, при этом кодируя, как сами файлы, так и их имена, для защиты от просмотра без ввода правильного пароля.

Нам понадобятся 5 основных функций в php коде, чтобы управлять rar файлами:

  • 1. Создать новый архив rar на php (rarCreateNewArchive);
  • 2. Добавить файлы в существующий архив rar и сразу зашифровать список файлов в архиве (назначив пароль) (rarAddEncryptedFiles);
  • 3. Получить список файлов из существующего, зашифрованного rar архива на php (rarGetEntryList);
  • 4. Удалить зашифрованные файлы из существующего rar архива на php (rarDeleteFiles);
  • 5. Зашифровать определённые файлы в rar архиве на php, или зашифровать список файлов в архиве (назначив пароль) (rarSetEncryptionFiles).

Итак, начнём.
!Внизу страницы можно скачать сам код класса, в котором реализованы сами функции шифрования-дешифрования файлов в rar архиве, а здесь мы приведём пару примеров, как работать с функциями класса в ваших php файлах.

Создать rar архив на php

Создаём новый архив rar на php и добавляем в него наши файлы

Сразу условимся, что наши тестовые файлы, которые мы хотим добавить в rar архив на php, находятся в корневой папке сайта в подпапке '/rartest/files/'.
А тестовые архивы 'рар' мы будем создавать в подпапке '/rartest/'.
Сам файл класса 'rarpack.php' лежит тут же, в корне сайта.

В начале кода подключаем наш класс для работы с rar архивами на php:
include_once($_SERVER["DOCUMENT_ROOT"] . "/rarpack.php");

Создаём новый файл архива (если он существует, то он будет очищен и станет пустым! обратите на это особое внимание!)
$_rar_new = new rarCreateNewArchive($_SERVER["DOCUMENT_ROOT"] . "/rartest/test1.rar", "password_rar_file");
Первым параметром мы указали полный путь к новому файлу архива, вторым - пароль к самому файлу rar. Это не пароль на шифрование файлов, это именно пароль для распаковки самого файла архива.

Добавляем несколько файлов, на лету шифруя их:
$_rar_new->rarAddEncryptedFiles($_SERVER["DOCUMENT_ROOT"] . "/rartest/files/file001.txt", "password_txt_file", "file001.txt", "AES_256");
$_rar_new->rarAddEncryptedFiles($_SERVER["DOCUMENT_ROOT"] . "/rartest/files/file002.txt", "password_txt_file", "file_big.txt", "AES_256");
$_rar_new->rarAddEncryptedFiles($_SERVER["DOCUMENT_ROOT"] . "/rartest/files/file003.txt", "password_txt_file", "testfolder/file_small.txt", "AES_256");

Первый параметр, это полный путь к добавляемому файлу. Второй, это пароль для шифрования этого файла внутри архива, третий это имя файла (вместе с папкой если нужно) которое будет назначено этому файлу в самом архиве (если вы указываете папку, или несколько - то эти папки будут созданы, и, при распаковке данный файл будет помещён именно в эти папки), четвёртый параметр это метод шифрования, он не обязателен к указанию и всегда равен AES_256.

Внимание! Мы в текущем коде не устанавливаем новый пароль самому rar архиву, мы назначаем пароль закодированным файлам в этом архиве. Если Вы хотите, чтобы ваш архив при распаковке у скачавшего его пользователя просил только один пароль - устанавливайте пароль шифрования при добавлении файлов в архив такой же, как и сам пароль rar архива при его создании.

Наши файлы внутри архива зашифрованы, но их список - пока нет. Любой? кто откроет наш rar архив в программной оболочке, увидит какие же папки и файлы мы туда добавили (хоть и не сможет посмотреть их содержимое). Если вам это не нужно и вы хотите скрыть список файлов и папок, то мы зашифруем их.
Чтобы зашифровать весь список в rar архиве, просто вызовем метод без указания имени файла:
$_rar_new->rarSetEncryptionFiles("password_file_list", "AES_256");

Первый параметр - пароль (желательно указать такой же, как и сам пароль архива, чтобы не вводить разные пароли пользователю), второй - метод шифрования (всегда AES_256).
Если нужно спрятать только некоторые файлы в списке, указываем их в третьем параметре:
$_rar_new->rarSetEncryptionFiles("password_file_list", "AES_256", "file_big.txt");
$_rar_new->rarSetEncryptionFiles("password_file_list", "AES_256", "testfolder/file_small.txt");

Внимание! Указываем именно новые имена файлов в нашем архиве, которые мы указывали для них при добавлении файлов в rar.
Закроем наш архив (тем самым сохранив все его изменения на диске): $_rar_new->Close();

Получим список зашифрованных файлов

Откроем наш (или любой другой) зашифрованный архив:
$_rar_new = new rarOpenArchive($_SERVER["DOCUMENT_ROOT"] . "/rartest/test1.rar", "password_rar_file");
Здесь пароль, который указан при создании самого файла rar.

Получим список всех записей в архиве:
$_all_entries = $_rar_new->rarGetEntryList();
if(!$_all_entries) die("Нет записей в архиве!");

Проходим по всем записям архива (зашифрованные списки файлов хранятся в этой переменой как разные записи, которые нельзя увидеть, они также не включаются в подсчет суммы записей count()):

Зашифровать список файлов в rar на php

Добавление новых файлов происходит по именам записей (новых, или уже существующих в архиве). А удаление записей, происходит по дескрипторам записей (Entries) при проходе, либо по дескриптору записи с указанием её имени.

В общем как то так, на самом деле всё гораздо проще, когда вы вникните в суть класса и поймёте, как он работает.
Вот сам код класса php:
Зашифрованный rar архив на php



ДОБАВИТЬ КОММЕНТАРИЙ
Варик i Варик i

Я указал для двух шифрований один и тот же пароль (а пароль на сами файлы оставил пустым). Но при распаковке, почему то архив запрашивает дважды ввод пароля. Не должен же он так вести себя при одинаковых паролях?

AHSSOFT AHSSOFT

Вар, сразу видно Си-нусоида задр...та :)
Ты пустой пароль имел ввиду - пустую строку указал в коде (двойные кавычки)? Правильные чуваки знают, что пустая строка это константа и она имеет значение - пустая строка! Чтобы пароль не применялся (а пароль у тебя на файлы именно пустая строка), нужно не передавать вообще этот параметр, или передать NULL, если уж так любишь много букФ :)

Варик i Варик i

Пиляха! В ваших недоязыках чёрт ногу сломит :)
Вот скажи мне, ну на.. зачем ты реализовывал интерфейс пустой строки и пустот в этом классе, почему не приравнял пустую строку к отсутствию пароля?

AHSSOFT AHSSOFT

А, ИБО, не.уй! Много спецсимволов в разных кодировочках может прилететь в пароль, поэтому проверка идет на точное совпадение, а PHP пустую строку при точном совпадении от пустоты отличает (и правильно делает). А писать доп. условие на проверку именно пустой строки - это моветон, ИБО! все знают, что нужно передавать NULL, или ни-че-го! :)

ANDROMAN ANDROMAN

Чой то в php 7.3, при указании максимального rar сжатия, упаковка даже небольшого фала раза в четыре стала медленнее, чем в других версиях пыха. Эл, что там в коде? Есть такое, или это у меня только на машине?

AHSSOFT AHSSOFT

Есть такое, сейчас меняю алго, там в семерке деприкейтнули пару хороших функций, вот из-за этого и стоп. Через пару дней будет новая версия для семерки - она будет быстрее гораздо, чем текущий код (ибо, в семерке добавили хороших вещей разрабы).


AHS-SOFT llc

9 Neepawa Ave, Toronto, ON M6R 1V2, Canada
+1(416) 5-32-40-48



AHS-SOFT LLC на карте

Картинки постов

Картинка 20Картинка 8Картинка 2Картинка 4Картинка 18Картинка 12Картинка 11

Разработка

Если Вы нуждаетесь в разработке серьёзных нейро-приложений для WEB, либо DESKTOP платформы, возможно, Мы сможем Вам помочь.


Обращайтесь к нам на странице Контакты. Кратко опишите идею вашего проекта и сроки, которые Вы готовы потратить на вашу идею.

Поделитесь

Все права сохранены! | © AHS-SOFT ® 2007-2024 | ahs-soft.com

Заголовок: Загрузить изображения

HTML или Текст:

Закрепить в топе  ::  Картинка поста: Картинка 1 Картинка 2 Картинка 3 Картинка 4 Картинка 5 Картинка 6 Картинка 7 Картинка 8 Картинка 9 Картинка 10 Картинка 11 Картинка 12 Картинка 13 Картинка 14 Картинка 15 Картинка 16 Картинка 17 Картинка 18 Картинка 19 Картинка 20

Комментарий: