【发布时间】:2011-10-03 06:24:09
【问题描述】:
我想加密在我的 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));
});
}
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 的一个很好的替代方案吗?
我怎样才能以更难破解的方式实现这种类型的加密?这种方法有什么特别的弱点吗?
我可能会找到一个负责加密的 JavaScript 库,并在服务器端使用 PHP 的 mcrypt 扩展。我在考虑 Blowfish,可能是 AES256,但我不确定哪一个给我的加密强度与内存消耗的最佳比率。
建议?
【问题讨论】:
-
我不知道 SSL 需要专用 IP。另外,我知道这是伪代码,但目前,
DBData = encrypt(encrypt(clientData,transfer_key),storage_key)- 如您所指,如果 transfer_key 在某种程度上是短暂的,则意味着您永远无法解密数据库数据。 -
所以,我(作为攻击者)所要做的就是嗅探您发送给客户端的纯 html 流量,其中包含带有加密/解密密钥的 javascript 代码。不错……说真的,坚持使用 SSL/TLS
-
@Damien_The_Unbeliever:SSL 本身没有;但他的提供者可能会将其打包为更昂贵计划的一部分。
-
你在哪里托管?你的主机似乎很便宜。
-
解决办法是切换到更合理的主机。
标签: php security encryption ssl