我想加密在我的Web应用程序中在服务器和客户端之间来回传输的数据.我会使用SSL,但需要证书和专用IP地址.我没有问题获得证书,但专用IP要求我升级到我的Web主机上每月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));
});
}
Run Code Online (Sandbox Code Playgroud)
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);
Run Code Online (Sandbox Code Playgroud)
如您所见,客户端发送到服务器的数据是加密的,反之亦然.并且数据库中的数据也被加密.当然,我永远不会实现这样的键.我可能会为每个用户随机生成第二个或第三个密钥.因此,transfer_key可以等于与随机密钥连接的constant_key,对于storage_key也是如此.
这会是SSL的一个很好的替代品吗?如何以一种难以击败的方式实现这种类型的加密?这种方法有什么特别的缺点吗?
我可能会找到一个负责加密的JS库,并在服务器端使用PHP的mcrypt扩展.我在想Blowfish,也许是AES256,但我不确定哪一个能给我加密强度与内存消耗的最佳比例.
建议吗?