Как зашифровать/защитить строку на PHP (с последующей расшифровкой)?
Доброго времени суток!
Сразу хочу предупредить - ранее с шифрованием на PHP не сталкивался, поэтому прошу объяснять "на пальцах" или давать ссылки на поясняющие материалы.
Предыстория:
Есть самописный внутрикорпоративный "продукт", который по своей сути является чем-то вроде вики. Информация хранится в файлах (обычные текстовики), появилась задача каким-то образом зашифровать эти файлы, чтобы сами по себе (при прямом обращении) они не были доступны для прочтения, но при доступе через "wiki" они могли быть открыты любым пользователем.
Усложения задачи:
1. Текст шифруется системой автоматически
2. У пользователя не может быть ключа для расшифровки
Мое предположение решения данной задачи сводится к следующему алгоритму:
1. Генерируется ключ шифрования/расшифровки и записывается в какой-нибудь конфиг (Генерируем примерно так: берем случайные числа, кэшируем их в md5, добавляем "соль", еще случайных числел и кэшируем по новой)
2. Шифруем файлы этим ключом и расшифровываем им же
Но здесь появляется следующая проблема - если получат доступ к файлам с данными (хоть и зашифрованными), то и доступ к ключу расшифровки тоже получат, поэтому, собственно вопрос: Как в данном случае можно зашифровать/расшифровать строку максимально безопасно? Т.е. чтобы злоумышленник, получивший доступ к зашифрованным файлам, не смог их расшифровать.
Заранее благодарю!
pS: прошу сразу ответить на следующие вопросы: Какую библиотеку для шифрования использовать (смотрю в сторону mcrypt)? Какой метод/алгоритм шифрования использовать?
Вот про это я тоже спрашиваю:
"Но здесь появляется следующая проблема - если получат доступ к файлам с данными (хоть и зашифрованными), то и доступ к ключу расшифровки тоже получат, поэтому, собственно вопрос: Как в данном случае можно зашифровать/расшифровать строку максимально безопасно? Т.е. чтобы злоумышленник, получивший доступ к зашифрованным файлам, не смог их расшифровать."
я предлагаю враппер: http-server [host1, публичный доступ]->wrapper-сервис[host2, доступ только с host1]->хранилище файлов [host3, доступ только с host2 + проверка петли на host 1]
wrapper монтирует хранилище и предоставляет API для WEB-сервера.
Чтобы расшифровать файлы - нужно будет получить доступ к 3-м хостам.
Можно построить все на сервисах/демонах в рамках одной ОС - но это не так безопасно, как с распределенными хостами.
ключи шифрования - хост1
алгоритм шифрования - хост2
шифрованные данные - хост3