加密文本以存储在 mysql 数据库中的最佳方法
Posted
技术标签:
【中文标题】加密文本以存储在 mysql 数据库中的最佳方法【英文标题】:Best way of encrypting text to store in mysql database 【发布时间】:2011-07-27 17:00:17 【问题描述】:我想知道将文本存储在数据库中并对其进行加密以防止其他人(管理员)阅读它的最佳方法。我允许用户编写(最多)纯文本段落,然后存储在数据库中。然后,此文本会在其帐户中显示回用户。这意味着一旦我加密数据并将其存储在数据库中,我就必须能够解密数据。 (我已经使用 php 创建了项目)
谢谢
【问题讨论】:
阅读此处:***.com/questions/1289061/… 【参考方案1】:您正在寻找的是MCrypt。此外,如果您希望数据真正安全,则需要使用 HTTPS 进行传输,因为一旦 PHP 脚本解密了密文(当用户访问文本时),纯文本将通过服务器的 NIC 发送出去.因此,狡猾的管理员或攻击者可以只嗅探接口上的流量并记录流量。
【讨论】:
【参考方案2】:AES_ENCRYPT
和 AES_DECRYPT
是加密/解密字符串的简单方法,无需自己编写代码,在 mysql 5 以上版本中可用。
请注意,AES_ENCRYPT
的输出是二进制字符串,它需要存储在二进制数据类型的列中(很可能是BLOB
)而不是文本类型,例如TEXT
或VARCHAR
,通常用于文本数据。
问题是您必须将加密密钥存储在某处,并且您必须以某种方式阻止管理员访问它。我不知道这是否可能(what 的管理员到底是什么?)
【讨论】:
您打算如何存储、提取、轮换和以其他方式管理加密密钥,以使其他人无法读取加密数据? @Justice:我不知道。如果没有对相关应用程序的更详细了解,就不可能提出这样的建议。 @Justice - 这取决于要求 - 您所说的“其他人”是指谁?如果其人员对服务器具有完全访问权限,则唯一的选择是使用客户端 (javascript) 加密。即使这样,他们也可以修改 javascript 代码以不加密数据。【参考方案3】:事实上,您无法阻止管理员查看这些文本,因为他也可以读取加密密码并对其进行解密。
【讨论】:
真的吗?仅当您存储密码本身时。如果您只存储密码哈希,管理员将无法解密文本。【参考方案4】:-
使用保存连接 (https) 以便
您的管理员无法获取密码
来自日志。
使用 MCript 加密解密
带有用户密码的数据。
与用户一起解密数据
密码。
但是有一个很大的缺点:
您必须在会话中以明文形式存储用户密码,因此您必须注意会话数据不会存储在日志、数据库等中...
如果您的管理员可以访问 php 代码,那么破解它只需几秒钟。
唯一可行的情况是您的管理员可以访问数据库和后端,但不能访问代码。
【讨论】:
以上是关于加密文本以存储在 mysql 数据库中的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章
当 API 调用需要以纯文本形式发送密码时,将密码存储在数据库中的最佳方法是啥?