python Day09

python Day09

用python发送能添加附件的邮件

要用python发送邮件需要定义一个可以添加正文和附件的邮件对象,这就需要用到MIMEMultipart方法,任何类型的附件都可以通过此种方法进行添加,用以下代码举例说明。

需要调用的模块

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

账号服务器连通

import smplib
# 1.发送人账号
sendAddress = '此处填写你的邮箱账号'
# 2.发送人授权码(邮箱中的授权码等同于密码)
password = '此处填写你的授权码'   # 不知道如何获取授权码的请自行百度,这里以qq邮箱举例
# 3.连通服务器
server = smtplib.SMTP_SSL('smtp.qq.com',465) #服务器,端口
#4.登录
loginResult = server.login(sendAddress,password)
print(loginResult)  #这里可以打印出来看一下是否成功登录
# (235, b'Authentication successful')
# 235响应成功状态码

以上操作完成后就成果连通邮箱服务器了,接下来就可以编辑邮件内容了

注:
常用邮箱服务器,发送邮件端口都是465,服务器名
新浪邮箱:smtp.sina.com
搜狐邮箱: smtp.sohu.com
126邮箱: smtp.126.com
163邮箱: smtp.163.com
qq邮箱: smtp.qq.com

编写邮件的内容

from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

#1.定义一个可以添加正文和附件的邮件对象
msg = MIMEMultipart()

# 2.构建发件人、收件人、抄送人、邮件主题(发件人收件人建议填写正确的邮箱账号)
msg['From'] = '泰罗<xxxx@qq.com>'
msg['To'] = '卡面来打<xxxxqq.com>'
msg['Cc'] = '赛文老祖<xxxxqq.com>'
msg['Subject'] = 'Python自动发邮件'

#3.构建正文,内容可随意编辑,邮件会保留格式
content= """
来光之国,有你好果汁吃,头套给你薅掉,必须打你脸
"""
#4.添加正文
#使用attach()向能够添加多组件的MIMEMultipart中添加邮件组成部分
msg.attach(MIMEText(content,'plain','utf-8'))

#5.添加附件,
# 先将附件使用二进制形式读取,再使用MIMEText方法进行规范化
# base64:最常用的字节传输方式
att_1 = MIMEText(open('文件路径','rb').read(),'base64','utf-8')
# 告知浏览器或邮件服务器这是字节流
att_1['Content-Type'] = 'application/octet-stream'
# 告知浏览器或邮件服务器这是一个名字叫做xxxx的邮件附件
# filename处不要出现中文,不同邮箱对待中文的方式不一样
att_1['Content-Disposition'] = 'attachment;filename="1.jpg"'
msg.attach(att_1)
#可重复添加附件步骤添加多个附件

#6.发送邮件
# server.sendmail(发件人,收件人,发送的消息)
# 发件人需要写登录账号的邮箱地址
# 收件人用列表存放
# 发送的消息: 字符串类型的邮件,msg.as_string()
#将邮件作为字符串
To = ['xxxx@qq.com']
server.sendmail(sendAddress,To,msg.as_string())
print('发送成功')

python操作PDF

用python对pdf文件进行操作需要调用PyPDF2模块

而PyPDF2模块操作PDF整体思想为,从源文件中读,对读出来的数据做的一系列操作都放入新的PDF文件。

加密pdf文件

import PyPDF2
#1.读取PDF
reader1 = PyPDF2.PdfReader('./PDF素材/水印.pdf') # 文件路径按实际情况而定

#2.创建一个空白的pdf写方法
writer1 = PyPDF2.PdfWriter()

#3.获取原来PDF的总页数
pages = reader1.getNumPages()
# 4. 分别将每一页PDF遍历
for i in range(pages):
    # 通过下标指定第几页,添加到空白PDF
    writer1.addPage(reader1.pages[i])

#5.加密: decrypt()为解密, encrypt()为加密,参数为口令字即密码

writer1.encrypt('0123') 

# 6.将PDF写入指定文件保存关闭
# 将指定文件使用二进制写模式打开,w:如果文件不存在自动创建新的,存在就清空内容再写入
f = open('水印(加密版).pdf','wb')
# 写入f中
writer1.write(f)
#保存关闭
f.close()

解密PDF文件

以下代码是已知密码的情况,下一小节会讲到python暴力破解密码的原理

import PyPDF2
reader1 = PyPDF2.PdfReader('水印(加密版).pdf')
#判断读出来的信息是否为加密信息:
print(reader1.is_encrypted)
# 解密
if reader1.is_encrypted:
    # 使用decrypt()和加密时的密码解密
    reader1.decrypt('0123')

# 创建空白的PDF写方法
writer1 = PyPDF2.PdfWriter()
#将读出来的每一页放入空白PDF中
for i in range (reader1.getNumPages()):
    writer1.addPage(reader1.pages[i])

#将PDF文件保存关闭
f = open('水印(解密版).pdf','wb')
writer1.write(f)
f.close()

读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光学文字识别
# 3 python中涉及到的光学文字识别
# EasyOCR模块、百度的飞桨、百度AI开发者平台有多个OCR模块可供python选择

给PDF添加水印

import PyPDF2

# 分别读取需要加水印的PDF和PDF水印模板

reader1 = PyPDF2.PdfReader('./PDF素材/001-Python认知.pdf')
water = PyPDF2.PdfReader('./PDF素材/水印.pdf')
writer1 = PyPDF2.PdfWriter()
for i in range(reader1.getNumPages()):
    page = reader1.pages[i]
    waterPage = water.pages[0]
    #page加水印waterPage页面融合:mergePage()
    #谁要加水印谁调用mergePage()方法
    page.mergePage(waterPage)
    #将添加了水印的页面添加到PDF写操作中
    writer1.addPage(page)

f = open('001-Python认知(水印版).pdf','wb')
writer1.write(f)
f.close()

python暴力破解密码

大致原理

如何使用python暴力破解’密码‘。

一、密码破解应用
python破解wifi密码
拿到一个有密码的压缩包,但不知道压缩包密码,
黑客破解账号密码,也可以使用python暴力破解
等等

暴力破解:穷举法

二、口令字的组合
数字、字母、标点符号
在ASCII码表中数字、字母、标点符号组合起来大概几十个符号
个别网站可能允许使用汉字做密码

采取大众化的形式尽可能的跑密码(排列组合穷举)

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

四、确认
密码使用数字和字母
长度为4-11位
设计排列组合穷举

python有一个函数可以帮助我们进行排列组合,实例如下:

from itertools import product
# product作用:将提供的容器中的所有元素排列组合形式按照指定长度完全列出
#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)
#2.指定长度范围
for length in range (4,12):
    #3.开始生成‘密码’
    # product(字符串容器,repeat = 长度)
    for i in product(newList, repeat = length):
        result = ''.join(i)
        print(result)

暴力破解密码解密PDF文件

通过代码来理解,代码如下

import PyPDF2
from itertools import product

reader1 = PyPDF2.PdfReader('水印(加密版).pdf')
#判断读出来的信息是否为加密信息:
print(reader1.is_encrypted)
# ---------------------------------------------------
# 解密
if reader1.is_encrypted:
    # product作用:将提供的容器中的所有元素排列组合形式按照指定长度完全列出
    # 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)
    # 2.指定长度范围
    lenght = 4
    while 4<= lenght <= 11:
        # 3.开始生成‘密码’
        # product(字符串容器,repeat = 长度)
        for i in product(newList, repeat=lenght):
            result = ''.join(i)
            print(f'正在尝试密码:{result}')
            # 使用decrypt()和加密时的密码解密
            # 解密失败:PasswordType.NOT_DECRYPTED
            # 解密成功:PasswordType.OWNER_PASSWORD
            reader1.decrypt(result)
            if str(reader1.decrypt(result))== 'PasswordType.OWNER_PASSWORD':
                #当密码解密成功后将密码长度设置为一个不可能存在的数值,这将停止while循环
                print(f'正确密码是;{result}')
                lenght = -1
                break
        lenght += 1


#-------------------------------------------


# 创建空白的PDF写方法
writer1 = PyPDF2.PdfWriter()
# 将读出来的每一页放入空白PDF中
for i in range (reader1.getNumPages()):
    writer1.addPage(reader1.pages[i])

#将PDF文件保存关闭
f = open('水印(解密版2).pdf','wb')
writer1.write(f)
f.close()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值