2009-12-15 70 views
0

我有一个连接字符串,我想将它作为查询字符串传递。为了安全起见,我想使用位于远程服务器上.php文件所在的同一文件夹中的gpg私钥加密连接字符串。加密查询字符串文本

我想知道将公钥和私钥保存在远程服务器上并将其用于加密和解密是否安全。

+0

我不知道我是否正确地得到你:是从网络访问此PHP文件?如果是这样,并且私钥驻留在相同的文件夹中,那么该密钥可能也是从完全不安全的网络访问的。 –

回答

1

第一个问题:为什么? - 如果您在同一台服务器上传输数据,请使用PHP会话或将其存储在数据库中。如果您希望将数据从一台服务器传输到另一台服务器,则还需要在这些服务器之间使用另一个通信通道,例如发送数据的HTTP请求。

如果你仍然想这样做:我不会使用GPG,因为这会产生相当多的CPU负载,并且会显着增加消息的大小,因此您的数据相对较短。例如使用blowfisch或类似的算法更好,参见PHP's crypt function

关于安全性:它或多或少与整个服务器一样安全,但您应该确保您的私钥隐藏在Web服务器的文档根目录之外。和读权限应限制在Web服务器的用户...

+0

它可以使用传统的加密来完成吗?在会话中存储未加密的字符串是否安全? – RKh

+0

什么是传统加密? 将数据存储在会话中同样与您的Web服务器一样安全。如果它由托管公司托管,他们可能有权访问该会话 - 但他们也可以访问该密钥。如果您的服务器位于您的数据中心,受物理锁保护并运行完整补丁软件,则它非常安全。 – johannes

+0

某些列值包含在文本区域控件中键入的长文本。会话可容纳多少数据? – RKh

0

尝试这些PHP函数convert_uuencodeconvert_uudecode

function encrypt_decrypt ($data, $encrypt) { 
    if ($encrypt == true) { 
     $output = base64_encode (convert_uuencode ($data)); 
    } else { 
     $output = convert_uudecode (base64_decode ($data)); 
    } 
    return $output; 
} 

$enc_txt = encrypt_decrypt ("QUERY TEXT", true); 
echo $enc_txt."\n"; 
// KjQ1NSU0RURANSQ1ODVgYGAKYAo= 
echo encrypt_decrypt ($enc_txt, false); 
// QUERY TEXT