python文件的操作以及简易shadow文件密码破解器

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()方法来打开文件

f=open("文件绝对路径位置") 

关闭文件

使用close()方法来关闭文件

文件.close()

文件读取

read()方法读取整个文件

file = file.read()

readline()方法每使用一次读取一行

file = file.readline

readlines()方法读取全部的文件将其封装成列表的形式

file = file.readlines

文件指针的刷新

seek()方法

Syntax: f.seek(offset, whence),f指的是file(或$你的文件名)
Parameters:
offset: 将光标向前移动n个位置
whence: 参考位置,一般参数为0,1,2
0 :将开头作为参考位置
1 :将当前作为参考位置
2 :将末尾作为参考位置

file.seek(5,1)

文件迭代

可以使用with open() as f: 来代替open()方法

这样就不需要自己手动关闭文件了

写入文件

write()

write() 内建方法功能与read() 和readline() 相反。它把含有文本数据或二进制数据块的字符串写入到文件中去。写入文件时,不会自动添加行结束标志,需要程序员手工输入。

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() 前给每行结尾加上行结束符。

['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标准库来进行破解

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 参数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值