Я хотел бы зашифровать данные, которые передаются между сервером и клиентом в моем веб-приложении. Я бы использовал SSL, но для этого требуется сертификат вместе с выделенным IP-адресом. У меня нет проблем с получением сертификата, но выделенный IP-адрес требует от меня перехода на тарифный план бизнес-хостинга, который стоит 20 долларов в месяц на моем веб-хосте. У меня нет планов на это, поскольку я придерживаюсь своего плана общего хостинга за 20 долларов в год.
Итак, я хотел бы реализовать альтернативу SSL. Однако он делает больше, чем SSL. Наряду с шифрованием данных, отправляемых туда и обратно, он также шифрует строки в базе данных. Я думал сделать что-то вроде этого:
Код JavaScript:
var transfer_key = 'whatever';
function encrypt(data, key) {...}
function decrypt(data, key) {...}
function send_data_to_server(url, data)
{
$.post(url, {'data' : encrypt(data, transfer_key) }, function(response) {
var decrypted_response = JSON.parse(decrypt(response));
});
}
Код PHP:
$data = $_POST['data'];
$transfer_key = 'whatever';
$storage_key = 'whatever2';
function encrypt($data, $key) {...}
function decrypt($data, $key) {...}
databaseQuery('INSERT INTO table VALUES (?)', encrypt($data, $storage_key));
$decrypted_data = decrypt($data, $transfer_key);
$response = processData($decrypted_data);
echo encrypt($transfer_key, $response);
Как видите,данные, которые клиент отправляет на сервер, зашифрованы, и наоборот. И данные в базе данных тоже зашифрованы. Конечно, я бы никогда не реализовал такие ключи. У меня, вероятно, был бы второй или третий ключ, который генерируется случайным образом для каждого пользователя. Таким образом, transfer_key может быть равен constant_key, соединенному со случайным ключом, и то же самое касается storage_key.
Будет ли это хорошей альтернативой SSL? Как я могу реализовать этот тип шифрования таким образом, чтобы его было труднее победить? Есть ли у этого подхода какие-то особые недостатки?
Я, вероятно, найду JS-библиотеку, которая позаботится о шифровании и будет использовать расширение PHP mcrypt на стороне сервера. Я думал о Blowfish, может быть, AES256, но я не уверен, какой из них дает мне лучшее соотношение силы шифрования и потребления памяти.
Совет?