我有代码输出给定字符列表中所有可能的字符组合,如下所示:
def charList():
charSet = string.ascii_letters + string.digits
for wordchars in product(charSet, repeat=8):
print(''.join(wordchars))
现在我需要将输出字符串转换为DES哈希,然后将输出与用户输入进行比较,以查看是否找到任何匹配项。
一直在做一些研究并没有取得多大进展。所以想知道这里是否有人可以提供帮助?
答案 0 :(得分:1)
快速搜索DES和Python给了我这些库:
答案 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'