link= "kali:$y$j9T$lR7REZ4XgU56yXNl9PFiN/$oI3B/OeQGXOoTb7opQ.azBMOgG2IM\
0neRj4MN3HCqQ.:19331:0:99999:7:::"
#shadow
print("[+]shadow :"+link)
# 用户名
username= link.split(":")[0]
print("[+]用户名 :"+username)
# 密码
password_hash= link.split(":")[1]
print("[+]密 码  :"+password_hash)
# 盐值
solt= password_hash[:password_hash.rfind("$")+1]   
#rfind("$")为从右向左查抄第一个$的位置
print("[+]盐 值  :"+solt)
# 爆破
import crypt
password= ""
def crack_linux_shadown_line(password):
    # 将password经过crypt模块加密后,跟password_hash进行对比
    if crypt.crypt(password,solt) == password_hash:
        return "密码正确:"+password        
    else:
        return "密码错误"   
print(crack_linux_shadown_line(password= password))
# 密码字典路径
pass_file_path="/usr/share/wordlists/test_password.txt"
with open(pass_file_path) as f:
    # 密码遍历
    for password in f:
        password= password.strip()
        # print(password)
        print(crack_linux_shadown_line(password=password))