在PHP中安全密码加密/解密字符串

Nic*_* T. 8 php security string encryption passwords

我想知道在PHP中是否存在一种简单但安全的方法来加密字符串(而不是密码),密码没有存储在服务器上.

我已经检查了PHP的可逆密码加密例程,但是如果入侵者有权访问服务器和源代码,我不确定它是否足够安全.

我们谈论的是一个自动系统,其中计算机向服务器发送请求,该服务器将信息存储在日志中.所以我想我可以在请求标头中发送加密密码,最好加密,但是如果不在服务器上以某种方式存储密码就很难解密.等等,我想我可能会把事情搞得太复杂,但我希望你能得到这个想法......即使黑客完全控制了服务器,这也是为了保证信息的安全.

emb*_*oss 4

如果我理解正确的话,您的目标是由服务器加密的日志。请求以明文形式发送,但您希望记录每个用户访问统计信息等内容,并且您认为此数据是机密的,因此它应该由服务器加密,并且也应该由服务器解密,如果必要的。

如果真是这样的话,其实事情并不算太复杂。

  • 生成服务器使用的加密密钥(AES 是一个不错的选择)。
  • 您将此密钥存储在文件中。
  • 确保应用程序和只有少数选定的人员有权访问该位置。最坏的情况是它出现在您的公共文件中,任何人都可以从网上下载它。因此,请将其放在远离公共资源的文件夹中:)
  • 使用基于密码的加密(例如 RFC 2898 中的 PBKDF2)对该文件进行加密。

然后你会意识到你造成了一个先有蛋还是先有鸡的问题——该文件再次需要服务器的密码才能访问存储在其中的密钥。但这是技巧 - 您必须在服务器启动时手动输入密钥,这就是您需要的临时组件。文件的密码应该是带外信息(例如放置在物理保管库中)并且不存在于计算机本身上。

另一种替代方案(但可能不太安全,因为密码将以某种物理形式存在)是依赖操作系统特定的“密码库”,例如 Windows 的独立存储