【问题标题】:password encryption on python?python上的密码加密?
【发布时间】:2013-02-11 07:20:29
【问题描述】:

我只是在 python 中创建一个新的应用程序进行注册。 我保存了数据库中的所有字段,并且成功创建了用户,但密码保存与我们在注册时填写的相同。 如何加密或使用 python 的默认功能作为密码。

请给我推荐一下?

【问题讨论】:

标签: python django-templates mezzanine


【解决方案1】:

要使离线密码破解成本更高,您可以使用bcrypt

如果你仅限于stdlib,有crypt module on Unix

hashed = crypt.crypt(plaintext)

【讨论】:

【解决方案2】:

您应该对密码进行哈希处理,以下代码根据您在 settings.py 中的 PASSWORD_HASHERS 对原始输入密码进行哈希处理

from django.contrib.auth.hashers import make_password
pass = make_password(raw_pass) # hashing is done here
user.set_password(pass)

【讨论】:

    【解决方案3】:

    不要自己实现这些东西,否则你可能会做错。

    对于密码存储,使用一些可逆编码或对称加密或来自 hashlib 的简单哈希,甚至是随机加盐的哈希都是当今主要的失败。

    如果您使用的是 django,请使用 django 提供的一些强大的算法(通常是以下之一:bcrypt、pbkdf2、sha512_crypt)。

    不使用 django 时:使用 passlib - 阅读其文档后。

    http://code.google.com/p/passlib/

    【讨论】:

      【解决方案4】:

      在从用户处(以及注册时)获取密码时对密码进行散列以对其进行加密。

      import hashlib
      m = hashlib.sha1()
      m.update("My users' password here")
      m.digest()
      

      参考:http://docs.python.org/2/library/hashlib.html#module-hashlib

      【讨论】:

        【解决方案5】:

        对于实际加密,您可以尝试M2CryptoPyCrypto。这些可能是您正在寻找的;但是,还有其他方法可以混淆 average 用户的密码:

        (如果您想了解更多关于哪种加密方法最适合您的答案,请查看此相关的 SO 帖子:Recommended Python cryptographic module?

        hashlib 将提供各种哈希算法(例如“SHA1、SHA224、SHA256、SHA384 和 SHA512”)。一个简单的例子:

        import hashlib
        enc = hashlib.md5()
        enc.update("Somerandompassword")
        print enc.hexdigest()
        

        这会打印出 md5 “Somerandompassword”: c5532f9e756b4583db4c627c8aa7d303

        但是,对于(base64)编码,例如,尝试:

        import base64
        enc = base64.b64encode("Somerandompassword")
        

        解码

        dec = base64.b64decode("U29tZXJhbmRvbXBhc3N3b3Jk")
        print dec
        

        将打印:Somerandompassword

        【讨论】:

        • md5 不是加密方式,而是哈希方式。而且它无法解密(这是重点)。除此之外,md5 不再适合密码散列,使用更强大的东西。
        • 这是一个很好的观点。你在那个方面绝对是正确的。我的错。
        • base64 不是加密,它是一种编码方式。它和纯文本一样糟糕(每个人都可以解码)。
        • 如果我使用哈希,那么错误会出现“500 internal serve”...但是现在我找到了解决方案..您只需要使用这个.. value.set_password("您的密码变量或密码")
        猜你喜欢
        • 2017-04-01
        • 2023-01-09
        • 1970-01-01
        • 2021-01-21
        • 2013-03-13
        • 1970-01-01
        • 1970-01-01
        • 2015-08-15
        • 2021-06-27
        相关资源
        最近更新 更多