admin管理员组文章数量:1516870
大家好,这里是滑稽研究所。本期我们需要完成一个对word文档加密的程序。在翻阅了网上一些资料和文章后,认为使用‘异或’来加密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
defrandom_key(length):# token_bytes,函数接受一个int参数,用于指定随机字节串的长度。# int.from_bytes把字节串转换为int,也就是我们需要的二进制数
key = token_bytes(nbytes=length)
key_int =int.from_bytes(key,'big')return key_int
defencrypt(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
defdecrypt(encrypted, key_int):
decrypted = encrypted ^ key_int
length =(decrypted.bit_length()+7)//版权声明:本文标题:Word文档里的隐藏宝藏:解密Wordtoken的正确姿势 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.betaflare.com/biancheng/1771328042a3264270.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论