【问题标题】:Encrypting Database Content加密数据库内容
【发布时间】:2023-12-31 07:31:01
【问题描述】:

如果我没记错的话,当你想加密数据库中的内容时,你将使用 md5。我现在用它作为密码。但现在我想为企业客户的所有个人信息等添加加密。以下是我的问题:

  1. 如果我 md5 一切,php 会以正常方式显示一切,就像没有 md5 一样?

  2. 当我允许编辑内容时,我必须在没有 md5 的情况下显示信息,然后在提交时添加 md5,对吗?

  3. 如果有人可以访问数据库,他们只会看到 md5。但是如果他们下载它然后删除md5,他们不会看到所有信息吗?

如您所知,我是一名处于压力之下的业余爱好者。如果我对 md5 的想法有误,请纠正我。如果是这样,我如何加密数据库,记住用户随时可以编辑信息。

谢谢。

【问题讨论】:

标签: database encryption hash md5 salt


【解决方案1】:

MD5 是一种散列算法,而不是加密算法。散列是一种方式;也就是说,您不能获取散列数据并将其转换回原始数据。 MD5 用于对密码进行哈希处理(嗯,哈希算法 用于对密码进行哈希处理...MD5 通常被认为是不安全的,不适合涉及安全的应用程序...例如密码),因为您只关心是密码是否匹配,而不是密码实际上是什么。这允许您在数据库中存储一个令牌(哈希),您可以使用该令牌进行比较,而无需实际存储密码。

如果您要对数据库数据进行应用程序级加密(而不是依赖于任何 RDBMS 特定的加密功能),您将始终必须在将数据放入 之前对其进行加密(以代码形式) 数据库并在您将数据从数据库中取出 时解密数据(以代码形式)。对于这样的系统,一般会使用像 AES 这样的对称密钥加密算法。

【讨论】:

  • 谢谢亚当。那么最好的加密方式是什么?
  • 对于数据库存储,通常使用像AES这样的对称加密算法。
【解决方案2】:

MD5 是一个散列函数!是一种单向函数。 您无法解码 MD5 哈希!

如果您使用 MD5 对内容进行编码,则会丢失数据!!! 而是使用 3DES、BLOWFISH 或其他加密方法!

加密取决于 DB 到 DB。每个数据库或多或少都有一个加密模块可以使用(和付费)

【讨论】:

  • 说您无法解码 MD5 哈希可能是危险的说法。对于管理员来说,这意味着他们无法取回数据,因为这不是加密。但是,这也意味着他们的数据是安全的,因为没有其他人可以在给定哈希的情况下反转原始数据,这并不完全正确。虽然有多组数据都会产生相同的 MD5 散列,但如果我有密码的 MD5 散列,我可以针对 MD5 冲突数据库运行该散列并查看最有可能(极少数)的候选者是什么。然后我简单地遍历列表,直到找到你的真实密码。
【解决方案3】:

据我所知,MD5 现在并不是真正的安全散列函数。网上有一些地方提供反向 MD5 服务,他们在那里收集一个巨大的字符串数据库,其中包含 MD5 等价物。尝试使用 SHA-512 之类的方法,并使用迭代散列等技术使其更安全。 PHP 有一个 crypt() 库,您可能想签出,或者使用 SQLite 数据库加密。

【讨论】:

    【解决方案4】:

    如果我 md5 一切,php 会以正常方式显示一切,就像没有 md5 一样?

    不。一切都将是一个 md5 摘要。原始数据将(几乎)无法从摘要中恢复。

    当我允许编辑内容时,我必须在没有 md5 的情况下显示信息,然后在提交时添加 md5,对吗?

    由于 md5 摘要不能(轻松)解码为原始数据,因此您必须将原始信息保存在某个地方。

    如果有人可以访问数据库,他们只会看到 md5。但是如果他们下载它然后删除 md5,他们不会看到所有信息吗?

    不。 md5 摘要不能(很容易)被反转来重建任何原始信息。

    【讨论】:

    • 没有办法对 MD5(或任何散列算法)摘要执行 100% 反转,因为有多个可能的输入会产生相同的输出。上下文可以确定什么可能是有效的输入,但作为一个通用算法,这是不可能的。
    • 谢谢 S.Lott。那么最好的加密方式是什么?
    • @AAA:这是一个单独的问题。第 1 步:搜索数据库加密。第 2 步:阅读回复。第 3 步:要求澄清具体令您感到困惑的事情。请避免假设并进行更多搜索。
    • @Lott 谢谢老兄。只是紧张。第一次工作需要这种级别的安全性。
    【解决方案5】:

    MD5 是一种单向散列函数。它不会被解密。刚刚加密。

    【讨论】:

    • 散列根本不是加密。