from secrets import token_bytes
from docx import Document
import docx
import time
def random_key(length):
# token_bytes ,函数接受一个 int 参数,用于指定随机字节串的长度。
# int.from_bytes 把字节串转换为 int ,外汇跟单gendan5.com也就是我们需要的二进制数
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)