36.5. crypt — 检查 Unix 密码的函数 — Python 文档

来自菜鸟教程
Python/docs/2.7/library/crypt
跳转至:导航、​搜索

36.5. 地穴 — 检查 Unix 密码的函数

该模块实现了 crypt(3) 例程的接口,该例程是基于修改的 DES 算法的单向哈希函数; 有关更多详细信息,请参阅 Unix 手册页。 可能的用途包括允许 Python 脚本接受用户输入的密码,或尝试使用字典破解 Unix 密码。

请注意,该模块的行为取决于运行系统中 crypt(3) 例程的实际实现。 因此,当前实现上可用的任何扩展也将在此模块上可用。

crypt.crypt(word, salt)

word 通常是在提示或图形界面中输入的用户密码。 salt 通常是一个随机的两个字符的字符串,它将用于以 4096 种方式之一扰乱 DES 算法。 salt中的字符必须在集合[./a-zA-Z0-9]中。 以字符串形式返回散列密码,该字符串将由与盐相同字母表中的字符组成(前两个字符代表盐本身)。

由于一些 crypt(3) 扩展允许不同的值,在 salt 中具有不同的大小,建议在检查密码时使用完整的加密密码作为盐。

一个说明典型用途的简单示例:

import crypt, getpass, pwd

def login():
    username = raw_input('Python login:')
    cryptedpasswd = pwd.getpwnam(username)[1]
    if cryptedpasswd:
        if cryptedpasswd == 'x' or cryptedpasswd == '*':
            raise NotImplementedError(
                "Sorry, currently no support for shadow passwords")
        cleartext = getpass.getpass()
        return crypt.crypt(cleartext, cryptedpasswd) == cryptedpasswd
    else:
        return 1