nixischev
@nixischev
PHP backend developer

Как зашифровать/защитить строку на PHP (с последующей расшифровкой)?

Доброго времени суток!

Сразу хочу предупредить - ранее с шифрованием на PHP не сталкивался, поэтому прошу объяснять "на пальцах" или давать ссылки на поясняющие материалы.

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

Усложения задачи:
1. Текст шифруется системой автоматически
2. У пользователя не может быть ключа для расшифровки

Мое предположение решения данной задачи сводится к следующему алгоритму:
1. Генерируется ключ шифрования/расшифровки и записывается в какой-нибудь конфиг (Генерируем примерно так: берем случайные числа, кэшируем их в md5, добавляем "соль", еще случайных числел и кэшируем по новой)
2. Шифруем файлы этим ключом и расшифровываем им же

Но здесь появляется следующая проблема - если получат доступ к файлам с данными (хоть и зашифрованными), то и доступ к ключу расшифровки тоже получат, поэтому, собственно вопрос: Как в данном случае можно зашифровать/расшифровать строку максимально безопасно? Т.е. чтобы злоумышленник, получивший доступ к зашифрованным файлам, не смог их расшифровать.

Заранее благодарю!

pS: прошу сразу ответить на следующие вопросы: Какую библиотеку для шифрования использовать (смотрю в сторону mcrypt)? Какой метод/алгоритм шифрования использовать?
  • Вопрос задан
  • 5328 просмотров
Пригласить эксперта
Ответы на вопрос 4
=)
<?php

    $data           = 'my secrect string...';
    $key            = md5( 'passwd123' );

    $crypted        = $data ^ str_pad( '', strlen( $data ), $key );
    print_r( $crypted ); // \HGZPLCE_VTJ

    $decrypted      = $crypted ^ str_pad( '', strlen( $crypted ), $key );
    print_r( $decrypted ); // my secrect string...

    // меняем пасс
    $decrypted      = $crypted ^ str_pad( '', strlen( $crypted ), md5( 'passwd321' ) );
    print_r( $decrypted ); // m{r"6<"ae{zw+poc0u)
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
и записывается в какой-нибудь конфиг
А если получат доступ к скриптам веб-сервера?
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
А потом запустят рекурсивно wget или другого паука и скачают весь сайт в расшифрованном виде.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы