从零开始的python学习Day10

python发送邮件添加附件

登录服务器

(以发送qq邮箱为例)发送邮件附件前登录服务器,输入账号、授权码

import smtplib
sendaddress = '24xxxx2@qq.com'
mima = 'axxxxacj'
server = smtplib.SMTP_SSL('smtp.qq.com',465)
denglu = server.login(sendaddress,mima)

构建能够添加附件的邮件

  1. 使用MIMEMultipart添加附件
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
  1. 定义一个可以添加正文和附件的邮件消息对象并构建发件人、收件人、邮件主题
msg = MIMEMultipart()
msg['from'] = 'mr.Yang<24xxx5352@qq.com>'
msg['to'] = 'Yang<243xxxx352@qq.com>'
msg['Subject'] = '中秋快乐'
  1. 构建正文

attach:使用此方法向能够添加多组件的MIMEMultipart中的添加邮件组成成分

content = """
中秋快乐!!
"""
msg.attach(MIMEText(content,'plain','utf-8'))
  1. 添加附件

先将附件使用二进制形式(字节)读取,再使用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)#附件添加成功
  1. 发送
To = '243xxxxx352@qq.com'
server.sendmail(sendaddress,To,msg.as_string())
print('发送成功!!!')

至此,带附件的邮件发送成功!!!

python暴力破解密码

“密码”破解应用

  • python破解WiFi密码
  • 拿到一个有密码的压缩包,但是不知道压缩包密码
  • 黑客破解账号

“密码”的组合

  • 数字,字母,标点符号
  • 在ASCII中数字字母标点符号组合起来大致有几十个符号
  • 个别网站可能还允许使用汉字作为密码

“密码”的长度

  • WiFi要求密码最低也是长度为8位的密码
  • 其他的密码要求均不一致,只能按照比较普遍的形式进行密码设置
  • 将密码的长度粗略的划分到4–11位

假设“密码”组合(数字+字母)

引入produt模块:将提供的容器中的所有元素组合形似按照指定的长度完全列出来

  1. 将数字字母放入容器中
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)
  1. 指定容器范围,开始生成密码
#指定密码长度
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文件

一般流程为:

  1. 读取PDF
  2. 创建空白的pdf的写方法
  3. 获取原来的pdf总页数
  4. 对读取的PDF做遍历
  5. 加密操作
  6. 将pdf写入指定文件
  7. 保存关闭
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)      
#最后写入文件关闭即可        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值