Всем привет!
Недавно, столкнулся с такой задачей...
Пользователь небольшого приложения (php+mysql) проявил утопительное желание к шифрованию данных, записываемых в БД.
Есть некоторые идеи.
Собственно, самая вычурная=)))))
(ВСЕ необходимые данные зашифрованы в mysql базе AES шифрованием ПО ключу пользователя)
Ключ системы (сайта): 32 символа. (условно) файл типа "F568HJ7W5KL4FGX92X4NG.keysys'
Ключ пользователя: 32 символа. (условно) файл типа "F85AQ9U521QH10185DGY.keyuser'
Ключ пользователя расположен за дерикторией www =)
Поля таблицы БД зашифрованы AES. тип поля tinyblob
Ключ системы ТОЛЬКО один. Находится на стороннем сервере, известному только разработчику.
При успешной авторизации пользователя, с помощью ключа Системы расшифровывается поле "путь к файлу ключа пользователя".
По этому пути считывается Ключ пользователя.
К ключу пользователя исходным кодом добавляется "соль" из N-ного количества символов и шифруется в base64.
Получившаяся комбинация сохраняется в сессию.
======
По необходимости, переменная ИЗ сессии с комбинацией(шифрованной) проходит через заранее определенную функцию(php):и через "соль" и base64 декодируется в ключ пользователя.
На выходе получаем ключ, для расшифровки tinyblob поля, зашифрованного AES по тому же ключу.
UPDATE: В итоге, ключ пользователя считывается только один раз (за период авторизации) и сохраняется в сессию + привязка к IP пользователя. По необходимости, через функцию вычесляется оригинал ключа и по нему идет запрос SELECT AES_ENCRYPT(`name`,$key_user) AS `name` FROM ...
Попади база к злоумышленнику - врятли что они там найдут...
======