day10 python发邮件添加附件、python暴力破解密码、python操作PDF:加密/解密、python读取PDF文字、python操作PDF添加水印、python合并多个PDF文件

01 python发邮件添加附件

  • 导入模块
import smtplib

1.发送人账号

sendAddress = '***********8@qq.com'

2.发送人授权码(邮箱中的授权码等同于密码)

#password = '#授权码'

3.连通服务器

** 465端口就是发送邮件的端口**

server = smtplib.SMTP_SSL('smtp.qq.com',465)
print(server)

4.登录

loginResult = server.login(sendAddress,password)
print(loginResult)
# (235, b'Authentication successful')
# 235响应成功状态码
  • 构建能够添加附件的邮件MIMEText
from email.mime.text import MIMEText
  • 使用MIMEMultipart添加附件
from email.mime.multipart import MIMEMultipart

1.定义一个可以添加正文和附件的邮件消息对象

  • msg是信息message的缩写
msg = MIMEMultipart()

2. 构建发件人、收件人、邮件主题等

msg['From'] = 'xxx<***********@qq.com'
msg['To'] = '**************@qq.com'
msg['Subject'] = '**********'

3.构建正文

content = """
我正在使用你的邮箱账号进行python邮件测试,即将轰炸你哦
"""
  • 使用attach()向能够添加多组件的MIMEMultipart中添加邮件组成部分
msg.attach(MIMEText(content,'plain','utf-8'))

4. 添加附件

先将附件使用二进制形式(字节)读取,再使用MIMEText方法进行规范化
base64:最常用的字节传输方式

attachment_1 = MIMEText(open('pic1.jpg','rb').read(),'base64','utf-8')

5. 告知浏览器或邮件服务器这是字节流

attachment_1['Content-Type'] = 'application/octet-stream'
  • 告知浏览器或邮件服务器这是字一个名字叫做xxx的邮件附件
  • filename = “pic2.jpg” 这个名字不要出现中文,不同邮箱对待中文的方式不一样
#添加第一个附件
attachment_1['Content-Disposition'] = 'attachment;filename = "pic1.jpg"'
msg.attach(attachment_1)
#添加第二个附件
attachment_2 = MIMEText(open('pic2.jpg','rb').read(),'base64','utf-8')
attachment_2['Content-Type'] = 'application/octet-stream'
attachment_2['Content-Disposition'] = 'attachment;filename = "pic2.jpg"'
msg.attach(attachment_2)

6.发送邮件

To = ['**********@qq.com']
server.sendmail(sendAddress,To,msg.as_string())
print('发送成功')

02 python暴力破解密码

一、密码破解应用

  1. python破解wifi密码
  2. 拿到一个有密码的压缩包,但是不知道压缩包密码,可以尝试使用python破解
  3. 黑客破解账号密码,也可以使用python进行暴力破解
    等等
  • 暴力破解:穷举法

二、“密码”的组合

数字、字母、标点符号:

  1. ASCII码中数字、字母、标点符号组合起来大概几十个符号。
  2. 个别网站可能还允许使用汉字作为密码
  3. 采取大众化的形式尽可能的跑密码(排列组合穷举)

三、“密码"的长度

  1. Wifi要求密码最低也是长度为8位的密码
  2. 其他的密码要求均不一致,只能按照比较普遍的形式进行密码设置
  3. 我们将密码的长度粗略的划分到4-11位

四、确认

  1. 密码使用数字和字母
  2. 长度位4-11位
  3. 涉及到排列组合穷举法
  • product作用:将提供的容器中的所有元素排列组合形式按照指定的长度完全列出来
from itertools import product

密码范围设置

#1. 将数字、字母放容器中
# 数字0~9
list1 = [chr(i) for i in range(48,58)]
# 大写字母A~Z
list2 = [chr(i) for i in range(65,91)]
# 小写字母a~z
list3 = [chr(i) for i in range(97,123)]
newList = list1+list2+list3
# print(newList)

#2. 指定长度范围
for length in range(4,12):

    # 3.开始生成“密码”
    # product(字符串容器,repeat=长度)
    for i in product(newList, repeat=length):
        result = ''.join(i)
        print(result)

03 python操作PDF:加密/解密

  • 导入模块
import PyPDF2

一、 PyPDF2模块操作PDF整体思想:

从源文件中读,对读出来的数据做的一系列操作都放入新的PDF文件

二、加密过程

  1. 读取PDF
reader1 = PyPDF2.PdfReader('./PDF素材/水印.pdf')
print(reader1)
  1. 创建一个空白的PDF写方法
writer1 = PyPDF2.PdfWriter()
  1. 获取原来的PDF总页数
pages = reader1.getNumPages()
  1. 分别将每一页PDF遍历
for i in range(pages):
    # 通过下标指定第几页,将此页添加到空白的PDF中
    writer1.addPage(reader1.pages[i])
  1. 加密操作:encrypt()
writer1.encrypt('0123')
  1. 将PDF写入指定文件再保存关闭

A. 将指定文件使用二进制写模式打开,w:如果文件不存在,自动创建新的,如果文件存在,清空内容再写入

f = open('水印(加密版).pdf', 'wb')

B. 将PDF写入到文件f中

writer1.write(f)

C.保存关闭

f.close()

decrupt()解密
encrypt()加密

三、解密过程

  • 导入模块
import PyPDF2
  • 读取指定的PDF文件
reader1 = PyPDF2.PdfReader('水印(加密版).pdf')
  1. 判断读出来的信息是否为加密信息:is_encrypted
print(reader1.is_encrypted)
  1. 解密:
if reader1.is_encrypted:
    # 使用decrypt()和加密时的密码进行解密
    reader1.decrypt('12345')
  1. 创建空白的PDF写方法
writer1 = PyPDF2.PdfWriter()
  1. 从读出来的PDF中读取每一页
for i in range(reader1.getNumPages()):
    # 将PDF的每一页添加到写方法中
    writer1.addPage(reader1.pages[i])
  1. 将PDF保存,关闭
f = open('水印(解密版).pdf', 'wb')
writer1.write(f)
f.close()

04 python读取PDF文字

import PyPDF2
  • PyPDF2不能读取PDF图片上的文字
reader1 = PyPDF2.PdfReader('./PDF素材/001-Python环境安装.pdf')
# 一页一页的读
for i in range(reader1.getNumPages()):
    # 根据下表指定页面
    page = reader1.pages[i]
    #将PDF每一页的内容读取:extract_text()
    content = page.extract_text()
    print(content)
  • PDF中图片上的文字应该如何读取
  1. 截图、文字识别。 —> OCR光学文字识别
  2. Python中涉及到的光学文字识别
  3. EasyOCR模块、百度的飞桨、百度AI开发者平台等N多个OCR模块可以供python选择。

05 python操作PDF添加水印

import PyPDF2
  1. 分别读取需要加水印的PDF和水印PDF模板
reader1 = PyPDF2.PdfReader('./PDF素材/001-Python认知.pdf')
water = PyPDF2.PdfReader('./PDF素材/水印.pdf')
  1. 创建空白的PDF写方法
writer1 = PyPDF2.PdfWriter()
  1. 遍历每一页,并添加到新文件中
for i in range(reader1.getNumPages()):
    page = reader1.pages[i]
    waterPage = water.pages[0]
    # 两个页面融合:mergePage()
    page.mergePage(waterPage)
    # 将添加了水印的页面添加到PDF写操作中
    writer1.addPage(page)
  1. 保存关闭
f = open('001-Python认知(水印版).pdf','wb')
writer1.write(f)
f.close()

06 python合并多个PDF文件

import PyPDF2
  1. 创建空白PDF文件
writer = PyPDF2.PdfWriter()
  1. 准备文件
file = ['001-Python环境安装.pdf','002-Pycharm安装.pdf']
for i in file:
    filePath = f'./PDF素材/{i}'
    reader = PyPDF2.PdfReader(filePath)
    for i in range(reader.getNumPages()):
        page = reader.pages[i]
        writer.addPage(page)

#保存到新文件

f = open('合并.pdf','wb')
writer.write(f)
f.close()

版权声明:本文为m0_70109725原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。