我想知道是否存在一种简单但安全的方法来加密字符串(而不是密码),并在PHP中使用未存储在服务器上的密码。
我已经检查了A reversible password encryption routine for PHP,但如果入侵者有权访问服务器和来源,我不确定它是否足够安全。
我们谈论的是一个自动系统,其中计算机向服务器发送请求,该服务器将信息存储在日志中。所以我想我可以在请求标头中发送加密密码,最好加密,但是如果不在服务器上以某种方式存储密码就很难解密。等等,我想我可能会让事情变得复杂太多,但我希望你明白这一点......即使黑客完全控制服务器,这也意味着保证信息的安全。
答案 0 :(得分:4)
如果我理解正确,您的目标是由服务器加密的日志。请求是以简单方式发送的,但是您希望记录类似于每个用户访问统计信息等的内容,并且您认为这些数据是保密的,因此它应该由服务器加密并且也可以由服务器解密,如果必要的。
如果是这种情况,实际上并不是太复杂。
然后您将意识到您创建了一个鸡蛋问题 - 该文件再次需要密码才能让服务器访问存储在其中的密钥。但这就是诀窍 - 您必须在手动启动服务器时输入密钥,这就是您需要的短暂组件。该文件的密码应该是带外信息(例如放置在物理保险库中),而不是计算机本身的任何地方。
另一种选择(但可能不太安全,因为密码将以某种物理形式出现)是依赖于特定于操作系统的“密码保险库”,例如Windows {Isolated Storage。
答案 1 :(得分:2)
这个似乎符合您要求的一个选择是使用公钥/私钥加密。如果您让用户使用公钥加密字符串,然后将加密数据存储在服务器上,则攻击者无法解密数据。
当/如果您需要解密数据时,只需将其复制到您拥有私钥的位置并将其用于解密。
答案 2 :(得分:0)
我会和Mcrypt一起在php中加密/解密数据 我选择的算法将是双重的。 您将需要一个密钥来加密/解密数据并通过请求发送它可能是一个安全问题,除非您实施了ssl。 如果加密应该是请求不是实时的事情,那么你只能在控制台中执行脚本,这样密码就不会存储在服务器上。
加密/解密的代码很简单:
$encrypted= mcrypt_ecb(MCRYPT_TWOFISH, $key, $input, MCRYPT_ENCRYPT);
$decrypted= mcrypt_decrypt(MCRYPT_TWOFISH , $key, $data, MCRYPT_DECRYPT);