广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python加密word文档详解
  • 724
分享到

Python加密word文档详解

Python加密word文档 2022-06-02 23:06:57 724人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录python加密Word文档总结Python加密word文档 我们先了解一下异或是什么。简单来说,如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。我们简单的梳理一下代码思路。代码分为两

目录

Python加密word文档

我们先了解一下异或是什么。简单来说,如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。我们简单的梳理一下代码思路。代码分为两部分,加密和解密。

1.加密

把文件转换成二进制的格式,然后生成等长的随机密钥进行异或操作,得到加密后的二进制文件。这一步我们需要保留的数据有,加密后的文件和随机生成的密钥,当然他们都是一些二进制数。

2.解密

这一步就简单了,我们把加密后的文件和之前随机生成的密钥再进行一次异或操作,即可得到原本的二进制数,然后我们再把它转换成文本即可。

OK,思路大致明了了,我们需要两个程序,加密程序接收str参数 ,运行完成会输出加密后的二进制word文档,和用于解密的二进制密钥。解密程序则需要接收两个int参数,分别为加密程序输出的两个二进制内容,异或之后输出原始文本。那么,上代码。

加密代码:


from secrets import token_bytes
from docx import Document
import docx
import time
​
def random_key(length):
    # token_bytes,函数接受一个int参数,用于指定随机字节串的长度。
    # int.from_bytes把字节串转换为int,也就是我们需要的二进制数
    key = token_bytes(nbytes=length)
    key_int = int.from_bytes(key, 'big')
    return key_int
​
def encrypt(raw):
    raw_bytes = raw.encode()
    #参数big意为正序,little则输出反序。
    raw_int = int.from_bytes(raw_bytes, 'big')
    key_int = random_key(len(raw_bytes))
    return raw_int ^ key_int, key_int
​
def decrypt(encrypted, key_int):
    decrypted = encrypted ^ key_int
    length = (decrypted.bit_length() + 7) // 8
    decrypted_bytes = int.to_bytes(decrypted, length, 'big')
    return decrypted_bytes.decode()
​
def encrypt_file(path, key_path=None,):
    document = Document(path)
    all_paragraphs = document.paragraphs
    file = docx.Document()
    file2 = docx.Document()
​
    jkl = input('请输入希望保存的文件名:') + '.docx'
​
    for paragraph in all_paragraphs:
        # 打印每一个段落的文字
        zz,key = encrypt(paragraph.text)
​
        #print('加密:',zz)
        #print('key:', key)
​
        file.add_paragraph(str(zz))
        file.save(jkl)
​
        file2.add_paragraph(str(key))
        file2.save("key.docx")
​
print('滑稽研究所出品!')
print('仅支持英文文件名。')
chengGong = encrypt_file(input('请输入需要加密的文件名:'))
print("已完成!十秒后自动关闭")
time.sleep(10)
#生成加密文件

通过 encode 方法,将字符串编码成字节串。int.from_bytes 函数将字节串转换为 int 对象。最后对二进制对象和随机密钥进行异或操作,就得到了加密文本。

解密代码:


from secrets import token_bytes
from docx import Document
import docx
import time
​
def random_key(length):
    # token_bytes,函数接受一个int参数,用于指定随机字节串的长度。
    # int.from_bytes把字节串转换为int,也就是我们需要的二进制数
    key = token_bytes(nbytes=length)
    key_int = int.from_bytes(key, 'big')
    return key_int
​
def encrypt(raw):
    raw_bytes = raw.encode()
    raw_int = int.from_bytes(raw_bytes, 'big')
    key_int = random_key(len(raw_bytes))
    return raw_int ^ key_int, key_int
​
def decrypt(encrypted, key_int):
    decrypted = encrypted ^ key_int
    length = (decrypted.bit_length() + 7) // 8
    decrypted_bytes = int.to_bytes(decrypted, length, 'big')
    return decrypted_bytes.decode()
​
jjj = []
kkk = []
​
def decrypt_file(path_encrypted, key_path=None, *, encoding='utf-8'):
    document = Document(path_encrypted)
    all_paragraphs = document.paragraphs
​
    do2 = Document('key.docx')
    all_p= do2.paragraphs
​
    for i in all_paragraphs:
        #str转int
        jiam = int(i.text)
        jjj.append(jiam)
​
        #print('加密:',jiam)
    #print(jjj)
​
    for k in all_p:
        #str转int
        key = int(k.text)
        kkk.append(key)
​
        #print('key:',key)
    #print(kkk)
​
    cc = zip(jjj,kkk)
    res = list(cc)
    return res
#传入元组,或两个int。
print('滑稽研究所出品!')
print('警告,严禁修改密钥文件名!!!')
print('直接输入文件名,无需格式后缀。')
rr1 = decrypt_file(input("请输入需要破解文件的文件名(仅限.docx文件):")+'.docx')
​
file = docx.Document()
for i in rr1:
    ff = decrypt(*i)
    #print(ff)
    #print(type(ff))
    file.add_paragraph(ff)
file.save("res.docx")
print('解密完成,请在当前文件夹下提取文件!')
print('十秒后自动关闭!')
time.sleep(10)

我们需要将两个程序打包成exe。运行加密程序得到的二进制word文档,可以给其他人,但密钥必须自己保存。当别人满足你的要求之后,我们可以把密钥和解密程序给他。注意,只对docx文件有效,且不可以修改密钥文件的名称,不然会报错,解密失败。

运行结果:

原始word文件。

在这里插入图片描述

加密后:

在这里插入图片描述

生成的key密钥:

在这里插入图片描述

加密后的文件和生成的密钥,放在解密程序文件夹下之后,会得到如下。我们得到了原文件,美中不足的是所有的首行缩进都消失了,变成了左对齐。

在这里插入图片描述

同样的文件,重新加密之后,会得到不同的加密文件和密钥。因此如果加密文件和密钥不匹配,即使他们的源文件是一样的,也是无法解密的。此外密钥丢失,加密的文件将永远不能解密。

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: Python加密word文档详解

本文链接: https://www.lsjlt.com/news/11234.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python加密word文档详解
    目录Python加密word文档总结Python加密word文档 我们先了解一下异或是什么。简单来说,如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。我们简单的梳理一下代码思路。代码分为两...
    99+
    2022-06-02
    Python 加密word文档
  • 如何给word文档加密
    要给Word文档加密,可以按照以下步骤操作:1. 打开Word文档,点击菜单栏中的"文件"选项。2. 在弹出的选项中,选择"信息"。...
    99+
    2023-09-15
    Word
  • Python操作word文档的示例详解
    目录写在前面创建一个文档先实现第一步,写入一个标题添加文字段落列表的添加图片的添加表格添加相关样式设置页眉和页脚写在前面 python-docx 不支持 doc 文档,一定要注意该点...
    99+
    2022-11-13
  • Java 加密、解密PDF文档
    本篇文章将介绍通过Java编程来设置PDF文档保护的方法。我们可以设置仅用于查阅文档的密码,即该通过该密码打开文档仅用于文档阅读,无法编辑;也可以设置文档编辑权限的密码,即通过该密码打开文档时,文档为可编辑状态。使用工具:Free Spir...
    99+
    2023-06-02
  • C# 加密、解密PDF文档
    出于保护一些重要文档的目的,常通过加密文档来设置文档打开权限或者编辑、操作的权限。以下示例内容将分享通过C#编程来加密PDF文档的方法,此方法中通过同时设置文档打开口令和许可口令两种加密口令来保护文档。文档打开口令只能用于打开文档,而许可口...
    99+
    2023-06-03
  • 详解Java如何实现加密或者解密PDF文档
    目录程序环境加密PDF文档解密PDF文档PDF文档加密是一种用于保护文件内容的功能。加密后的文档需要提供密码才能打开和查看。这一功能有效防止未经授权的访问、复制和修改 PDF 文件。...
    99+
    2023-03-10
    Java加密解密PDF Java加密PDF Java解密PDF Java PDF
  • Java实现向Word文档添加文档属性
    目录程序环境:方法1:手动引入。方法2: 如果您想通过 ​​Maven​​安装,则可以在 pom.xml 文件中添加以下代码导入 JAR 文件。将内置文档属性添加到 Word 文档完...
    99+
    2023-01-29
    java如何设置word文档属性 Java 将文档属性添加到 Word 文档 Java 设置Word文档属性
  • 运用Python巧妙处理Word文档的方法详解
    目录工具生成Word案例读取操作word文档总结工具 python3.7 Pycharm Excel python-docx 生成Word案例 创建一个demo.doc文档,代码如下...
    99+
    2022-11-11
  • Python-docx:读写word文档
    1 Python DocX目前是Python OpenXML的一部分,你可以用它打开Word 2007及以后的文档,而用它保存的文档可以在Microsoft Office 2007/2010, Microsof...
    99+
    2023-01-31
    文档 Python docx
  • C# 加密、解密PDF文档(基于Spire.Cloud.PDF.SDK)
    Spire.Cloud.PDF.SDK提供了接口PdfSecurityApi可用于加密、解密PDF文档。本文将通过C#代码演示具体加密及解密方法。使用工具:Spire.Cloud.PDF.SDKVisual Studio必要步骤:步骤一:d...
    99+
    2023-06-03
  • Python实现自动化处理Word文档的方法详解
    目录1. 批量生成Word文档2. 将Word文档批量转换成PDF3. 在Word文档中批量标记关键词4. 在Word文档中批量替换关键词使用Python实现Word文档的自动化处理...
    99+
    2022-11-11
  • Python读取Word文档内容
    Python读取Word文档内容 在Python中,我们可以使用Python-docx模块来读取Word文档内容。这个模块提供了一种方法,即使用Python代码来读取和编辑Word文档。 安装Pyth...
    99+
    2023-09-24
    word python 开发语言
  • Python 读取 Word 文档操作
    目录前言Python 读取 Word 文档安装 python-docx库前言 Word 文档 (.docx) 是另一种主要用于存储文本的常见文档。它们通常由 Mi...
    99+
    2022-11-11
  • Java 实现导出 Word 文档的方法详解
    系列文章目录 文章目录 系列文章目录前言一、添加 Apache POI 依赖:二、创建 Word 文档:三、添加内容到文档:四、导出文档:总结 前言 在 Java 应用程序中,有时候我...
    99+
    2023-09-02
    java word 开发语言
  • python之python-docx:操作 office word 文档
    在Python中,有一个名为python-docx的库,它提供了丰富的功能,可以方便地创建、修改和读取Word文档。 本文将详细介绍python-docx库的使用,并提供一些示例来演示其中的功能。为了更好地理解,我们将分为以下几个方面进行讨...
    99+
    2023-08-31
    c# 开发语言 word
  • Java怎么实现加密或解密PDF文档
    这篇文章主要介绍了Java怎么实现加密或解密PDF文档的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java怎么实现加密或解密PDF文档文章都会有所收获,下面我们一起来看看吧。PDF文档加密是一种用于保护文件内...
    99+
    2023-07-05
  • win11文档如何加密
    这篇文章主要介绍“win11文档如何加密”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“win11文档如何加密”文章能帮助大家解决问题。win11文档加密详细教程:首先找到想要加密的文件,右键选中,打...
    99+
    2023-07-02
  • 怎么用Python读写word文档
    本篇内容主要讲解“怎么用Python读写word文档”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Python读写word文档”吧!1.Python写word文档要操作word文档首先需要...
    99+
    2023-06-02
  • Java怎么添加水印到Word文档
    这篇文章主要讲解了“Java怎么添加水印到Word文档”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java怎么添加水印到Word文档”吧!一般可设置文字水印或者加载图片作为水印,一般可设置...
    99+
    2023-06-02
  • C#实现Word和ODT文档相互转换详解
    目录程序环境方法1方法2格式转换1. Word转为ODTC#vb.net2. ODT转为WordC#vb.netODT文档格式一种开放文档格式(OpenDocument Text)。...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作