【问题标题】:Python Usage of Crypt FunctionPython 使用 Crypt 函数
【发布时间】:2017-01-27 05:30:35
【问题描述】:

如何在 Python 3 中实现 crypt 选项?

我理解的用途是:

Hash = crypt.crypt(password, salt)

但是,该函数具有一组不同的散列函数。来自文档:

crypt.METHOD_SHA512 具有 16 个字符盐和 86 个字符哈希的模块化加密格式方法。这是最强的方法。

crypt.METHOD_SHA256 另一种模块化加密格式方法,16 字符盐和 43 个字符哈希。

crypt.METHOD_MD5 另一种模块化加密格式方法,8 个字符 salt 和 22 个字符的哈希值。

crypt.METHOD_CRYPT 使用 2 个字符 salt 和 13 个字符的哈希。这是最弱的方法。

我的问题是如何选择函数使用的算法?

这是一个非常基本的问题,我不敢相信我自己没有找到答案 - 如果我在浪费您的时间,我深表歉意。

【问题讨论】:

    标签: python function hash crypt


    【解决方案1】:

    您将方法作为 salt 参数传递。来自crypt function docstring

    如果salt没有指定或者是None,最强 将选择可用的方法并生成盐。否则, salt 可能是 crypt.METHOD_* 值之一,或者是一个字符串 由crypt.mksalt()返回。

    例如:

    crypt.crypt("password", crypt.METHOD_SHA512)
    

    幕后变成:

    crypt.crypt("password", crypt.mksalt(crypt.METHOD_SHA512))
    

    【讨论】:

    • 谢谢!但是我可以指定过程吗?那就是我可以使用 SHA512 但提供我自己的盐吗?
    【解决方案2】:

    改编自Red Hat solution 和@Leonard_Saracini 的答案(删除反斜杠使其成为单行):

    python3 -c 'import crypt,getpass,sys; \
    print(crypt.crypt(getpass.getpass(), crypt.mksalt(crypt.METHOD_SHA512)))'
    

    截至 2018 年 8 月,这应该是安全的。

    【讨论】:

      【解决方案3】:

      使用 bash:$ python3 -c "import crypt; print(crypt.crypt('password', '\$6\$saltstring'))"

      $6$ 用于 SHA512,如果您使用像我这样的 bash 终端,$ 必须用 \ 转义

      【讨论】:

        猜你喜欢
        • 2013-05-05
        • 1970-01-01
        • 1970-01-01
        • 2014-07-01
        • 1970-01-01
        • 2021-08-23
        • 1970-01-01
        • 1970-01-01
        • 2010-09-25
        相关资源
        最近更新 更多