加密数据库

时间:2013-03-25 07:42:54

标签: php mysql security encryption

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

我想Encrypt整个数据库 基本上我想要的是如果有人获得数据库登录凭证,则必须无法读取数据。

我已阅读有关mysql ENCODE()AES_ENCRYPT()函数的内容。但是这种方式会导致PHP脚本的很多变化以及一些性能问题。

是否有任何技术可以加密整个数据库文件或以其他任何方式实现此目的?

2 个答案:

答案 0 :(得分:1)

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

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

对于MySQL /等,你的里程会有所不同,但也应该可以。

避免使用AES_ENCRYPT()和等效的。 ENCODE()也没有任何帮助,因为encoding is not encryption

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

答案 1 :(得分:-1)

SHA512bcrypt_encode()功能一起用于密码和校验和。

对于其他特定数据,使用来自PHP文件的自己的SALT +使用某种机制编码base64_encode($your_db_table_data) + "MY_SALT_FROM_WEB".然后向后,base64_decode($your_db_table_data) + MY_SALT_FROM_WEB

你可以使用gzdeflate来解压和压缩你的数据+使用盐来解密。例如:

$data = gzdeflate($your_data) + YOUR_SALT;

这将像数据库中一样简单:��O�KWH�KQpI�r\���*JZ<��AR

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

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

如果您希望更复杂的解码用于char和较小的数据base64_enocode / base64_decode + YOUR_SALT_HIDDEN_FROM_WEB,数据库中的数据用于CHAR()和较小的文本。

我的想法是如何在数据库中为VARCHAR()用法加密数据。对于文本数据,使用带有压缩的压缩方式和SALT的组合。

我目前不知道其他解决方案,或使用AES技术结帐加密MySQL数据:http://thinkdiff.net/mysql/encrypt-mysql-data-using-aes-techniques/

这使用AES_ENCRYPTAES_DECRYPT集成在MySQL中,但这仅限于VARBINARY(150)或VARCHAR(100)。使用带有加密方法的压缩可以使用集成的MySQL AES函数来完成此操作。

希望这会有所帮助。