【问题标题】:Access hashed mysql password from python从python访问散列的mysql密码
【发布时间】:2013-06-20 06:17:23
【问题描述】:

这似乎有些琐碎,但我花了一些时间谷歌搜索没有结果。无论如何,我正在开发一个 Web 应用程序,我需要将“敏感”数据存储在 mysql 数据库中,然后访问它以验证来自 python 的 api 调用。我不是安全专家,但我对散列和加密有基本的了解。

我知道如何使用 aes_decrypt aes_encrypt 加密数据,我也知道如何使用 mysql 提供的 password() 函数对数据进行哈希处理。

我的第一个问题是我应该加密这些数据还是散列它?我的第二个问题是,一旦我使用 mysql 中的 password() 函数对其进行哈希处理,我不知道如何在 python 中“访问”或“使用”密码信息。

非常感谢任何帮助。

【问题讨论】:

  • 您是否希望安全地存储您的数据(在数据库级别加密)和/或在您的网络之间传输时保护您的数据服务器和您的数据库服务器(使用安全通信通道)?
  • 由于网络应用程序正在存储用户提供的数据,我想在从网络应用程序到数据库的传输过程中保护它,并在它进入数据库后对其进行哈希处理,以防有人获得访问权限到服务器。
  • 您不能将 data 存储/交换为hash,因为“散列”是从可变长度数据到固定长度数据的映射——引入了某种数据丢失。否则,“散列”(在一般情况下)是不可逆的。您无法从哈希中取回原始数据。您可能正在这里寻找encryption
  • 要输入的数据是固定长度的,但是是的,我需要检索它,然后用它做“事情”。所以加密似乎是要走的路。

标签: python mysql encryption hash


【解决方案1】:

首先我不是python专家,我的回答只是针对一般方法。

Web 应用程序中的密码通常存储为哈希值,而不是加密,如果您的表被泄露,这基本上会使他人更难获取密码。散列应该尽可能可靠地生成。请不要只使用 MD5,最好使用更安全的东西(从今天的角度来看)并适当地加盐以最大限度地减少彩虹攻击的风险。

我不会为此使用 MySQL Password() 函数。 documentation 说:

PASSWORD() 函数被 MySQL 中的身份验证系统使用 服务器;您不应该在自己的应用程序中使用它。为了那个原因 目的,请考虑使用MD5()SHA2()

如果你想用 MySQL 散列,这会留下SHA2(),但不要忘记在散列之前对字符串加盐。我的做法是使用您的应用程序对字符串进行散列(参见python hashlib 以供参考)、salt it like this,然后将散列存储在数据库中。这避免了您的应用程序和数据库服务器之间的数据安全问题。

【讨论】:

    猜你喜欢
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 2014-06-10
    • 2011-01-20
    • 2023-03-29
    • 2016-12-04
    • 2021-09-15
    相关资源
    最近更新 更多