文章目录
python发送邮件添加附件
登录服务器
(以发送qq邮箱为例)发送邮件附件前登录服务器,输入账号、授权码
import smtplib
sendaddress = '24xxxx2@qq.com'
mima = 'axxxxacj'
server = smtplib.SMTP_SSL('smtp.qq.com',465)
denglu = server.login(sendaddress,mima)
构建能够添加附件的邮件
- 使用MIMEMultipart添加附件
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
- 定义一个可以添加正文和附件的邮件消息对象并构建发件人、收件人、邮件主题
msg = MIMEMultipart()
msg['from'] = 'mr.Yang<24xxx5352@qq.com>'
msg['to'] = 'Yang<243xxxx352@qq.com>'
msg['Subject'] = '中秋快乐'
- 构建正文
attach:使用此方法向能够添加多组件的MIMEMultipart中的添加邮件组成成分
content = """
中秋快乐!!
"""
msg.attach(MIMEText(content,'plain','utf-8'))
- 添加附件
先将附件使用二进制形式(字节)读取,再使用MIMEText方法进行规范化,base64最常用的字节传输方式
attachment1 = MIMEText(open('2.jpg','rb').read(),'base64','utf-8')
# 告知服务器或者浏览器这是字节流
attachment1['Content-Type'] = 'application/octet-stream'
插入附件
attachment1['Content-Disposition'] = 'attachment;filename="附件名字"'
msg.attach(attachment1)#附件添加成功
- 发送
To = '243xxxxx352@qq.com'
server.sendmail(sendaddress,To,msg.as_string())
print('发送成功!!!')
至此,带附件的邮件发送成功!!!
python暴力破解密码
“密码”破解应用
- python破解WiFi密码
- 拿到一个有密码的压缩包,但是不知道压缩包密码
- 黑客破解账号
“密码”的组合
- 数字,字母,标点符号
- 在ASCII中数字字母标点符号组合起来大致有几十个符号
- 个别网站可能还允许使用汉字作为密码
“密码”的长度
- WiFi要求密码最低也是长度为8位的密码
- 其他的密码要求均不一致,只能按照比较普遍的形式进行密码设置
- 将密码的长度粗略的划分到4–11位
假设“密码”组合(数字+字母)
引入produt模块:将提供的容器中的所有元素组合形似按照指定的长度完全列出来
- 将数字字母放入容器中
list1 = [chr(i) for i in range(48,58)]
list2 = [chr(i) for i in range(65,91)]
list3 = [chr(i) for i in range(97,123)]
newlist = list1+list2+list3
print(newlist)
- 指定容器范围,开始生成密码
#指定密码长度
for length in range(4,12):
# 开始生成密码
for i in product(newlist,repeat = length):
# print(i)
result = ''.join(i)
print(result)
以上代码将会产生4到12位字母数字组合的所有情况。
python操作PDF(加密)
导入PyPDF2模块,该模块主要思想是:从源文件中读,对读出来的数据做的一系列操作都放到新的pdf文件
一般流程为:
- 读取PDF
- 创建空白的pdf的写方法
- 获取原来的pdf总页数
- 对读取的PDF做遍历
- 加密操作
- 将pdf写入指定文件
- 保存关闭
import PyPDF2
#读取
reader1 = PyPDF2.PdfReader('./xxx.pdf')
#创建
writer1 = PyPDF2.PdfWriter()
#获取页数
pages = reader1.getNumPages()
#遍历
for i in range(pages):
writer1.addPage(reader1.pages[i])
#加密操作
writer1.encrypt('0023')#密码0023
#写入指定文件
f = open('加密.pdf','wb')
writer1.write(f)
# 保存关闭
f.close()
python操作PDF(解密)
is_encrypted:判断是否为加密信息,返回值为True或False
decrypt:解密
import PyPDF2
#读取加密pdf文件
reader1 = PyPDF2.PdfReader('加密.pdf')
#判断是否加密
if reader1.is_encrypted:
# 使用decrypt()和加密时的密码进行解密
reader1.decrypt('0023')
# 创建空白的pdf写方法
writer1 = PyPDF2.PdfWriter()
# 读取reader1的每一页
for i in range(reader1.getNumPages()):
writer1.addPage(reader1.pages[i])
# 将pdf保存关闭
f = open('解密版.pdf','wb')
writer1.write(f)
f.close()
结合python暴力破解PDF密码
上述解密我们通过直接在decrypt方法中输入密码,但是若记不住密码,则需要python暴力破解密码。
我们将解密的decrypt注释,插入暴力破解密码的代码,穷举法去对应正确密码,耗时可能较长。
import PyPDF2
from itertools import product
reader001 = PyPDF2.PdfReader('加密.pdf')
writer001 = PyPDF2.PdfWriter()
if reader001.is_encrypted:
length =4
while 4<=length <=11:
# 3、开始生成密码
for i in product(newlist, repeat=length):
result = ''.join(i)
print(f'正在尝试密码:{result}')
# print(reader001.decrypt(result))
if str(reader001.decrypt(result)) == 'PasswordType.OWNER_PASSWORD':
print(f'正确的密码是:{result}')
print(reader001.decrypt(result))
# 当解密成功后,密码长度设置为一个不可能存在的数值,导致while循环不能再正常执行
length=-1
break
length+=1
#最后再加上写入文件,文件关闭即可
这里的newlist列表即:26个大写字母+26个小写字母+10个数字组成的列表
python读取pdf文字
extract_text:将pdf每一页的内容读取
import PyPDF2
# PyPDF2不能读取PDF上的文字
reader1 = PyPDF2.PdfReader('xxx.pdf')
#先读取文件,然后根据下标指定页面,最后读取pdf每一页内容
for i in range(reader1.getNumPages()):
page1 = reader1.pages[i]
print(page1.extract_text().replace(' ',''))
python操作pdf添加水印
一般步骤为:
- 读取要加水印的文件
- 读取水印文件
- 创建新文件
- 将水印添加到要添加水印的文件
- 写入文件
- 关闭文件
#读取要加水印的文件
reader1 = PyPDF2.PdfReader('1.pdf')
#读取水印文件
watwr1 = PyPDF2.PdfReader('水印.pdf')
#创建新文件
writer1 = PyPDF2.PdfWriter()
for i in range(reader1.getNumPages()):
page = reader1.pages[i]
watwr1page = watwr1.pages[0]
# 两个页面重合使用mergepage
page.mergePage(watwr1page)
# 将添加了水印的页面添加到pdf写操作中
writer1.addPage(page)
f = open('添加水印版.pdf','wb')
writer1.write(f)
f.close()
python合并多个PDF
一般步骤:
- 创建新文件
- 将要合并的文件放入列表中
- 循环将列表加到新列表中
- 关闭文件
#创建新文件
writer = PyPDF2.PdfWriter()
#将要合并的文件放入列表中
filt = ['001.pdf','002.pdf']
#循环将列表加到新列表中
for i in filt:
filepath = f'{i}'
reader = PyPDF2.PdfReader(filepath)
for i in range(reader.getNumPages()):
page = reader.pages[i]
writer.addPage(page)
#最后写入文件关闭即可