加密和解密数据库中的所有数据


Encrypt and decrypt all data in database

我希望能够加密我保存在MySQL数据库中的所有数据。我还需要能够使用私钥解密数据。

此数据库可由多人访问。

我想知道我需要使用什么PHP功能来完成这个。

谢谢

加密你的整个数据库是很多麻烦,除非数据库提供"透明加密",Oracle数据库提供这样的东西。使用透明加密的轻量级开源解决方案是SQLite。使用此特性,加密并不直接应用于数据,而是对存储本身进行加密。这意味着您可以像往常一样处理数据库,另外还有一个好处,即物理存储是加密的。但不幸的是,MySQL不提供这样的东西。

首先,为什么加密整个数据库不是一个好主意。加密的数据对数据库来说就像随机的垃圾。这暗示了很多负面的东西,比如
  • select不再像以前那样处理你的数据,如果有的话(需要很多努力)
  • 索引变得非常无用
  • 数据库日志呈现无用

如果你使用MySQL的内置加密支持进行加密,那么这意味着数据本身以纯文本形式发送到数据库-除非你使用tls安全连接,这意味着窃听者根本不会关心你的加密。

因此,如果您需要加密数据,您应该将其保持在最低限度,并且只加密数据中真正敏感的部分,以便仍然能够对其执行有效的查询。如果应用程序和数据库之间不可能有安全的TLS连接,您还应该直接在应用程序中加密数据。

如果您需要在数据库中加密一组客户的信用卡号码(或社会安全号码,或税务文件号码,或其他需要保密的字段),下面是不应该这样做的方法,然后是一些更好的方法:

http://www.di-mgt.com.au/cryptoCreditcard.html