【问题标题】:Automatic encryption in a MySQL database with PHP?使用 PHP 在 MySQL 数据库中自动加密?
【发布时间】:2014-07-25 17:38:26
【问题描述】:

我正在使用 MySQL db 和 PHP,并且大部分 db 数据已经使用用户提供的密码加密,ircmaxwell 发现的优秀加密类 here 它运行良好。

$e = $crypt->base64_encode(encrypt($string, $password));
$e2 = $crypt2->decrypt(base64_decode($string), $password); 

但是有什么方法可以直接由服务器自动加密和解密数据,甚至我都无法以某种方式知道密码?我只是在集思广益,但也许“全表加密”作为 MySQL 中的一个功能?!!!还是一些以可驳斥方式混淆的 PHP 功能? :-) PHP 中的内置加密/解密,也许?这样只有计算机才能加密/解密数据……即使我完全控制了数据库和 php 代码,我也无法访问它?即使有人用枪指着我的头或在我的指甲下放竹子或其他可怕的东西?

我想有一个合理安全的合理否认说,“即使我想知道,我实际上也不知道里面有什么。”对于无法使用用户提供的密码加密的某些列。似乎我要么创建一个纯字符串,要么用另一个字符串加密那个字符串。

似乎我不能成为唯一一个试图实现这一目标的人,但我已经搜索和搜索,但找不到正在讨论的类似应用程序......更不用说解决了。所有页面似乎都假设人们已经知道密码,或者试图从加密数据中破解它。第 22 条军规。或者也许是薛定谔的猫?

任何帮助将不胜感激。谢谢!

【问题讨论】:

  • 我不确定你在问什么......
  • @raz 我刚刚编辑了标题以使其更清晰。
  • @ntoskrnl,不,这比我要找的更笼统。除非服务器有办法秘密创建和存储用于加密/解密特定数据位的公钥和私钥。我看不出这将如何应用,但感谢您提供相同的链接!
  • 所以您希望服务器能够在没有用户提供密码的情况下加密和解密它存储的任何内容?

标签: php mysql encryption cryptography


【解决方案1】:

您可以在脚本结束之前unset 变量,这样它们在运行后将无法访问。除此之外,除非您研究 SSL,否则服务器不会加密事物,除非您告诉它要加密什么以及如何加密。

也许您还可以考虑在客户端生成随机生成的解密密钥,告诉用户保存这些密钥,而不是保留它们。这就是mega.co.nz 的运作方式。

cmets 中的其他相关讨论。

【讨论】:

  • 感谢您的建议。在这种情况下,用户部分不是问题。但是我需要服务器进行非用户输入加密,对于服务器,除了服务器之外什么都没有。即使使用 SSL,服务器也会有公钥和私钥对,管理员可以使用它来获得访问权限。在 UNSET 的情况下,如果它是一个会话,那将非常有用……但这将涉及在一个地方发生的一个动作和在其他地方发生的另一个动作(不同的计算机,可能是不同的国家)。我可以看到它 ENCRYPTING 很好,但是会话结束后,如何解密?
  • 除非有人(无论是服务器、用户还是管理员)知道密钥,否则您无法解密。如果密钥被丢弃,解密将变得非常困难。我不知道任何允许无密钥解密的算法。
  • 但是有没有办法让服务器知道并存储密钥而用户或管理员不知道它是什么?如果我能回答这个问题,那么我可能是黄金。我看到了在会话进行时动态使用它的方法,但不知道如何在需要时保留它以供几天、几周或几个月后使用。
  • 没有。服务器存储的任何内容都可以被足够坚定的个人访问。
  • 好的...那可能就是我正在寻找的答案。您想将其发布为答案吗? (你能回答两次吗?)如果我没有得到其他一些创造性的解决方案,我会在一天左右的时间内选择它。感谢您抽出宝贵的时间,我希望这个问题很有价值。我被其他一些人打分了,真的很努力地问好。
猜你喜欢
  • 2011-07-15
  • 2016-07-13
  • 1970-01-01
  • 2010-09-18
  • 2021-07-02
  • 2016-01-14
  • 2011-03-04
  • 2011-05-06
  • 2012-12-22
相关资源
最近更新 更多