3

我的代码可以输出给定字符列表中所有可能的字符组合,如下所示:

def charList():
    charSet = string.ascii_letters + string.digits
    for wordchars in product(charSet, repeat=8):
        print(''.join(wordchars))

现在我需要将输出字符串转换为 DES 哈希,然后将输出与用户输入进行比较,以查看是否找到任何匹配项。

一直在做一些研究,并没有取得太大进展。所以想知道这里是否有人可以提供帮助?

4

3 回答 3

2

如果要散列字符串(而不是加密它们),可以使用内置的hashlib模块:

>>> import hashlib
>>> m = hashlib.md5()
>>> m.update("Nobody inspects")
>>> m.update(" the spammish repetition")
>>> m.digest()
'\xbbd\x9c\x83\xdd\x1e\xa5\xc9\xd9\xde\xc9\xa1\x8d\xf0\xff\xe9'

编辑:正如评论中所说,更喜欢hashlib.sha256()今天更安全的。

于 2012-11-14T17:53:15.317 回答
1

快速搜索 DES 和 Python 给了我这些库:

于 2012-11-14T17:44:55.837 回答
1

http://docs.python.org/2/library/crypt.html

平台:Unix

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

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

crypt.crypt(字,盐)

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

由于一些 crypt(3) 扩展允许不同的值,在 salt 中具有不同的大小,因此建议在检查密码时使用完整的加密密码作为 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
于 2012-11-14T17:49:00.737 回答