在MYSQL中对敏感数据使用AES加密-实现问题
在讨论使用加密在MYSQL中存储敏感信息时,存在许多问题。有些人对强化web服务器、数据库服务器和web应用程序()提出了很好的建议。然而,关于MYSQL的AES_Encrypt和AES_Decrypt功能的确切实现,除了几个关于用法()的技术问题之外,几乎没有讨论过 我正在使用以下MYSQL准备的语句加密敏感信息:在MYSQL中对敏感数据使用AES加密-实现问题,mysql,security,encryption,cryptography,aes,Mysql,Security,Encryption,Cryptography,Aes,在讨论使用加密在MYSQL中存储敏感信息时,存在许多问题。有些人对强化web服务器、数据库服务器和web应用程序()提出了很好的建议。然而,关于MYSQL的AES_Encrypt和AES_Decrypt功能的确切实现,除了几个关于用法()的技术问题之外,几乎没有讨论过 我正在使用以下MYSQL准备的语句加密敏感信息: $stmt = $db->prepare("INSERT INTO Table_Name (SensitiveData) VALUES (AES_ENCRYPT(?,UNHE
$stmt = $db->prepare("INSERT INTO Table_Name (SensitiveData) VALUES (AES_ENCRYPT(?,UNHEX(SHA2('RandomStringofData',512))))");
$stmt->bind_param('s',$SensitiveData);
$stmt->execute();
$stmt->close();
我使用AES_DECRYPT函数和相同的SHA2字符串在需要时解密数据。按照我的理解,如果没有人访问web服务器本身或了解SHA2密码,他们就无法轻松访问这些敏感数据。例如,获得数据库服务器访问权限的人不会帮助他们解释这些敏感数据
我有几个问题:
谢谢。为了数据安全,请不要使用
AES\u ENCRYPT()
。如果应用程序具有必须加密存储的敏感数据,则应在应用程序中实现加密和解密(即,在PHP代码中)
AES\u ENCRYPT()
有几个主要问题:
- 加密密钥被传输到MySQL服务器。当查询运行时,它将在
中对其他客户端可见。此外,如果启用了常规日志或慢速查询日志,则可能会将密钥写入这些日志SHOW PROCESSLIST
- 如果您没有使用SSL连接到MySQL(您可能没有),那么加密密钥和敏感数据的明文都将通过网络传输,并可能在那里被截获
- 许多常用的MySQL版本(早于5.7.4)只支持ECB模式
在PHP中实现加密时,不要使用mcrypt。它有缺陷,没有维护,在PHP7.1中被弃用(在以后的版本中可能会被完全删除)。理想情况下,您应该使用一个库来封装尽可能多的加密(比如);如果做不到这一点,请使用OpenSSL扩展中可用的加密原语。这有助于澄清一些问题,同时也提出了一些其他问题。通过在应用程序中加密/解密,您的意思是在PHP代码本身中运行加密并将加密值保存到数据库中吗?我没有使用ECB或mcrypt,但听起来LibNa可能是一种可能的解决方案。因此,如果我在应用程序中进行加密/解密,我还需要libnail吗?1)是的。数据库应该只处理存储和检索数据。加密应该是PHP代码。2) LibNade是您在应用程序中执行加密/解密的方式。避免直接使用加密原语。