如何在Python中散列字符串?

时间:2012-11-14 17:42:04

标签: python

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

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

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

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

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

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

  

平台:Unix

     

该模块实现了crypt(3)例程的接口,即   基于修改的DES算法的单向散列函数;看到了   Unix手册页了解更多详情。可能的用途包括允许   Python脚本用于接受来自用户的键入密码或尝试   用字典破解Unix密码。

     

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

     

crypt.crypt(word,salt)

     

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

     

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

     

说明典型用法的简单示例:

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

答案 2 :(得分:1)

如果要散列字符串(而不加密它们),可以使用内置的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'