关于php:加密数据库

Encrypt Database

我有一个用PHP编写的网站,支持MySql数据库。

我想要整个数据库。基本上我想要的是,如果任何人获得数据库登录凭证,就不能读取数据。

我读过mysql ENCODE()AES_ENCRYPT()函数。但是这种方式会导致PHP脚本中的大量更改,以及一些性能问题。

是否有加密整个数据库文件的技术或其他方法来实现这一点?


如果您正在寻找符合标准的方法,只需确保您的数据库使用的文件系统受到全磁盘加密的保护。

对于PostgreSQL,这通常可以通过关闭PostgreSQL,将/var/lib/postgresql复制到加密驱动器,然后重命名旧目录,并在重新启动数据库服务器备份之前在/var/lib/postgresql上安装新驱动器来实现。(确定迁移成功后,一定要将旧目录的内容输入到shred中。)

对于mysql/etc,您的里程数会有所不同,但也应该是可能的。

避免使用AES_ENCRYPT()和同等产品。ENCODE()也没有帮助,因为编码不是加密。

如果需要对单个记录进行加密,您可能会对我们的PHP和SQL中的可搜索加密策略感兴趣,但这可能有点超出了这个问题的范围。我们有一个名为ciphersweet的库,它在php+sql中实现了可搜索的加密。


对密码和校验和使用SHA512bcrypt_encode()功能。

对于其他特定的数据,使用php文件中的salt,使用某种机制base64_encode($your_db_table_data) +"MY_SALT_FROM_WEB".和backwards,base64_decode($your_db_table_data) + MY_SALT_FROM_WEB进行编码。

你可以使用gzdeflate,它可以分解和压缩你的数据+使用salt使解密变得困难。例子:

1
$data = gzdeflate($your_data) + YOUR_SALT;

这将产生与数据库中一样简单的结果:??O?KWH?KQpI?r\???*JZ

用于解码deflate的用法为:gzinflate(gzdeflate($your_data_from_db + YOUR_SALT_FROM_WEB));

这是参考:http://php.net/manual/en/function.gzinflat.php

如果您希望对char和更小的数据base64_enocode/base64_decode+您的_salt_hidden_对web进行更复杂的解码,其中包含char()数据库中的数据和更小的文本。

这就是我将如何在数据库中加密数据以供varchar()使用的想法。对于文本数据,使用带压缩和盐组合的加密方式。

我目前还不知道其他的解决方案,或者使用aes技术签出加密mysql数据:http://thinkdiff.net/mysql/encrypt-mysql-data-using-aes-techniques/

它使用AES_ENCRYPTAES_DECRYPT集成到MySQL中,但这仅限于varbinary(150)或varchar(100)。使用带加密方法的压缩可以代替使用集成的mysql AES函数。

希望能有所帮助。