python文件对象以及简易shadow文件密码破解器
文章目录
文件对象的方法
常用函数功能f = open('PATH')打开指定路径的文件f 是文件对象。
f.read()从文件对象中读取文件内容
f.readline()读取一行内容
f.readlines()返回一个列表,元素是文件的每一行内容
f.write()向文件中写入内容
f.writelines()以列表的方式向文件中写入内容。
f.close()关闭文件
time.sleep()沉睡响应的秒数
打开文件
open()方法的参数
访问模式 | 操作 | 说明 |
---|---|---|
r | 以读方式打开 | 默认打开文件的方式 文件不存在则报错。 |
w | 以写方式打开 | 文件存在则清空,不存在则创建。 |
a | 以追加模式打开 | 不存在则创建。 |
+ | 以读写模式打开 | 如r+,w+,a+。 |
b | 以二进制模式打开 | 如rb,wb,ab。 |
使用open()方法来打开文件
python
f=open("文件绝对路径位置")
关闭文件
使用close()方法来关闭文件
python
文件.close()
文件读取
read()方法读取整个文件
python
file = file.read()
readline()方法每使用一次读取一行
python
file = file.readline
readlines()方法读取全部的文件将其封装成列表的形式
python
file = file.readlines
文件指针的刷新
seek()方法
Syntax: f.seek(offset, whence),f指的是file(或$你的文件名)
Parameters:
offset: 将光标向前移动n个位置
whence: 参考位置,一般参数为0,1,2
0 :将开头作为参考位置
1 :将当前作为参考位置
2 :将末尾作为参考位置
python
file.seek(5,1)
文件迭代
可以使用with open() as f: 来代替open()方法
这样就不需要自己手动关闭文件了
写入文件
write()
write() 内建方法功能与read() 和readline() 相反。它把含有文本数据或二进制数据块的字符串写入到文件中去。写入文件时,不会自动添加行结束标志,需要程序员手工输入。
python
f = open('sec.dic', 'a')
f.write('360\n')
f.close()
f = open('sec.dic', 'a')
f.write("eversec\n")
8
f.close()
writelines()
和readlines() 一样,writelines() 方法是针对列表的操作,它接受一个字符串列表作为参数,将它们写入文件,行结束符并不会被自动加入,所以如果需要的话,必须在调用writelines() 前给每行结尾加上行结束符。
python
['venustech\n', 'nsfocus\n', 'topsec\n', 'dbappsecrutiy\n', 'knownsec\n', 'colasoft\n', 'sangfor\n', 'qianxin\n', 'chaitin\n', 'sbr-info\n']
f = open('sec.dic', 'a')
f.writelines(l)
f.close()
案例shawod密码破解脚本
利用crypt标准库来进行破解
python
def mimapojie():
import crypt
password=""
print("[+] 脚本启动成功 ")
wordlist=input("请输入能的密码字典的绝对路径:")
with open(wordlist, "r", encoding="utf-8") as f:
key = input("请输入要破解的密钥:")
print("[+] 等待破解密码")
salt = key[0:key.rfind("$") + 1:1]
for line in f:
line = line.strip()
jm = crypt.crypt(line, salt)
if jm == key:
password=line
print(f"[+] 密码破解成功密码为:{password}")
break
if password !="":
pass
else:
print("[-]密码不存在")
mimapojie()
工具测试:
注释 :哈希方法
3.3 新版功能.
crypt 模块定义了哈希方法的列表(不是所有的方法在所有平台上都可用)。
crypt.METHOD_SHA512
基于 SHA-512 哈希函数的模块化加密格式方法,具备 16 个字符的 salt 和 86个字符的哈希算法。这是最强的哈希算法。
crypt.METHOD_SHA256
另一种基于 SHA-256 哈希函数的模块化加密格式方法,具备 16 个字符的 salt 和 43 个字符的哈希算法。
crypt.METHOD_BLOWFISH
另一种基于 Blowfish 的模块化加密格式方法,有 22 个字符的 salt 和 31 个字符的哈希算法。
3.7 新版功能.
crypt.METHOD_MD5
另一种基于 MD5 哈希函数的模块化加密格式方法,具备 8 个字符的 salt 和 22 个字符的哈希算法。
crypt.METHOD_CRYPT
传统的方法,具备 2 个字符的 salt 和 13 个字符的哈希算法。这是最弱的方法。
模块属性
3.3 新版功能.
crypt.methods
可用口令哈希算法的列表,形式为 crypt.METHOD_* 对象。该列表从最强到最弱进行排序。
模块函数
crypt 模块定义了以下函数:
crypt.crypt(word, salt=None)
word 通常是用户在提示符或图形界面上输入的口令。可选参数 salt 要么是 mksalt() 返回的字符串,即 crypt.METHOD_* 之一(尽管不是所有平台都可用),要么就是一个完全加密的包含 salt 值的口令,正如本函数的返回值。如果未给出 salt,将使用最强的哈希方法( methods() 返回)。
查验口令通常是传入纯文本密码 word ,和之前 crypt() 调用的结果进行比较,应该与本次调用的结果相同。
salt (随机的 2 或 16 个字符的字符串,可能带有 $digit{TX-PL-LABEL}#x60; 前缀以提示相关方法) 将被用来扰乱加密算法。 salt 中的字符必须在 [./a-zA-Z0-9] 集合中,但 Modular Crypt Format 除外,它会带有 $digit{TX-PL-LABEL}#x60; 前缀。
返回哈希后的口令字符串,将由 salt 所在字母表中的字符组成。
由于有些 crypt(3)) 扩展可以接受各种大小的 salt 值,建议在查验口令时采用完整的加密后口令作为 salt。
在 3.3 版更改: 除了字符串之外, salt 还可接受 crypt.METHOD_* 值。
crypt.mksalt(method=None, *, rounds=None)
返回用指定方法随机生成的 salt。如果没有给出 method,则使用 methods() 返回的强度最高方法。
返回一个字符串,可用作传入 crypt() 的 salt 参数。
rounds 指定了 METHOD_SHA256, METHOD_SHA512 和 METHOD_BLOWFISH 的循环次数。 对于 METHOD_SHA256 和 METHOD_SHA512 而言,必须为介于 1000 和 999_999_999 之间的整数,默认值为 5000。 而对于 METHOD_BLOWFISH,则必须为 16 (24) 和 2_147_483_648 (231) 之间的二的幂,默认值为 4096 (212)。
3.3 新版功能.
在 3.7 版更改: 加入 rounds 参数。