【问题标题】:arguments to cryptographic functions密码函数的参数
【发布时间】:2008-10-17 08:55:21
【问题描述】:

我有点困惑,加密函数的参数是一个字符串。我是否应该简单地用 str() 包装非字符串参数,例如

hashlib.sha256(str(user_id)+str(expiry_time))
hmac.new(str(random.randbits(256)))

(暂时忽略 random.randbits() 可能在密码学上不好)。 编辑:我意识到 hmac 示例很愚蠢,因为我没有将密钥存储在任何地方!

【问题讨论】:

    标签: python cryptography


    【解决方案1】:

    嗯,通常散列函数(通常是加密函数)对字节起作用。 Python 字符串基本上是字节字符串。如果要计算某个对象的哈希值,则必须将其转换为字符串表示形式。如果您想检查哈希是否正确,请确保稍后应用相同的操作。并确保您的字符串表示不包含任何您不想检查的更改数据。

    编辑:由于受欢迎的要求,一个简短的提醒,Python unicode 字符串不包含字节,而是包含 unicode 代码点。每个 unicode 代码点包含 多个 字节(2 或 4,取决于 Python 解释器的编译方式)。 Python 字符串只包含字节。所以 Python 字符串(类型 str)是最类似于字节数组的类型。

    【讨论】:

    • 您可能想澄清“str”和“unicode”这两种 Python 字符串类型之间的区别。
    【解决方案2】:

    你可以。

    但是,对于 HMAC,您实际上希望将密钥存储在某个地方。没有密钥,您以后无法验证哈希值。 :-)

    【讨论】:

      【解决方案3】:

      哦,Sha256 并不是真正的工业级加密功能(尽管不幸的是,它在许多网站上都非常普遍地使用)。这不是保护密码或其他关键数据的真正方法,但足以生成临时令牌

      编辑:如前所述,Sha256 至少需要一些盐。没有盐,Sha256 被字典攻击(时间方面)破解的门槛很低,而且还有很多 Rainbow 表可供使用。就我个人而言,我不会使用比 Blowfish 更少的密码(但那是因为我偏执)

      【讨论】:

      • 你真的是那个意思吗?当然,如果你想用它来保护密码,你应该添加一个盐,但对于所有哈希函数都是如此。就个人而言,我会说 SHA-256 与哈希函数一样具有工业实力。
      • 正如你提到的,Sha256 至少需要一些盐。没有盐,Sha256 被字典攻击(时间方面)破解的门槛很低,而且还有很多 Rainbow 表可供使用。就个人而言,我不会使用比 Blowfish 更少的密码(但那是因为我偏执)
      猜你喜欢
      • 2023-04-05
      • 2015-07-30
      • 2019-07-09
      • 1970-01-01
      • 1970-01-01
      • 2015-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多