为什么我在用Python3进行编码时出现无效的语法错误?

问题描述 投票:0回答:1

我正在尝试破解一组密码、散列和盐,用于练习。这是我目前所创建的密码,但编码是错误的。谁能告诉我哪里出错了,我是个新手。

谢谢你的帮助

以下是代码

salt_chars = ("1", "2", "3", "a", "b", "c")
"salt".join = [random.choice(salt_chars)for salt in range(0,10)]
passwd = input("Enter your password: ")
hobj = hashlib.md5(passwd+salt)
hobj = hashlib.md5(passwd.encode() + salt.encode())
hobj.hexdigest()
with open ("spacedinosaur.txt", "w") as ucd:
    ucd.write(salt+ ":" + hobj.hexdigest)

salt = ""
pwdhash = ""
with open ("ucd.txt", "r") as udc:
    for line in udc:
        1 = line.strip()
splitln = 1,split(":")
salt = splitln[0]
pwdhash = spltln[1]
actual_hash = hashlib.md5
(passwd.encode () + salt.encode(hexdigest())
encode(hexdigest) if actual_hash == expected_hash:
 if actual_hash == expected_hash:
     print("Access granted")
 else:
     print("Access denied")
python hash encoding python-3.7 cracking
1个回答
0
投票

你的语法错误来自于单独调用 encode() 。你需要在调用函数时预置一个字符串。"your_string".encode()这应该可以解决你的语法错误,希望能回答你的问题。


0
投票

我没有任何关于hashlib的经验,但我也许可以帮助你解决一般的python问题。

在第2行.join()是一个字符串的方法,它的参数是iterable,但你不能这样使用它。我想你的意思是将加入的字符串保存在 salt 这样的变量。

salt = "".join([random.choice(salt_chars)for salt in range(0,10)])

如前所述,你不能用1作为变量名, 但在下面的一行中,你要调用... ... splitln = 1,split(":") 它将尝试将 splitln 变成一个包含数字 1 的元组,并返回错误使用的 split 方法。

为了从文件中获取数据,可以试试这样的代码。

with open(filename, "r") as file:
    data = file.read()

data.strip()
splitln = data.split(":")

0
投票

这段代码有很多问题

  • 正如其他人已经指出的那样。1 不是一个有效的变量名。

  • salt.encode(hexdigest()) 无法使用。传递给编码的参数必须是一个有效的编码方法,比如UTF-8或ASCCI。

  • 你重复了 if actual_hash == expected_hash: 两次

  • 在python中,新的行是一个新的语句(通常),所以 actual_hash=hashlib.md5(passwd.encode () + salt.encode(hexdigest()) 和下一行必须在同一行。

  • 我不明白你这一行想做什么?actual_hash=hashlib.md5(passwd.encode () + salt.encode(hexdigest()) 但编码的sytax是明确的。string.encode(encoding=encoding, errors=errors)

© www.soinside.com 2019 - 2024. All rights reserved.