|
第三次
加密
- from secrets import token_bytes
- from docx import Document
- import docx
- def random_key(length):
- key = token_bytes(nbytes=length)# 函数接受一个int参数,用于指定随机字节串的长度。
- key_int = int.from_bytes(key, 'big')# 把字节串转换为int,也就是我们需要的二进制数
- return key_int
- def encrypt(raw):
- raw_bytes = raw.encode()
- raw_int = int.from_bytes(raw_bytes, 'big')#big为正序,little则输出反序。
- 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()
-
- for paragraph in all_paragraphs:# 打印每一个段落的文字
- ciphertext,key = encrypt(paragraph.text)
- file.add_paragraph(str(ciphertext))
- file.save('ciphertext.docx')
- file2.add_paragraph(str(key))
- file2.save("key.docx")
- encrypt_file(input('请输入需要加密的文件名(无需加格式后缀):')+'.docx')
- print("加密完成,请在当前文件夹下提取文件")
复制代码 解密:
- from secrets import token_bytes
- from docx import Document
- import docx
- def random_key(length):
- key = token_bytes(nbytes=length)# 函数接受一个int参数,用于指定随机字节串的长度。
- key_int = int.from_bytes(key, 'big')# 把字节串转换为int,也就是我们需要的二进制数
- 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()
- a = []
- b = []
- def decrypt_file(path_encrypted, key_path=None, *, encoding='utf-8'):
- document = Document(path_encrypted)
- all_paragraphs = document.paragraphs
- for i in all_paragraphs:
- a.append(int(i.text))
- for k in Document('key.docx').paragraphs:
- key = int(k.text)
- b.append(key)
- res = list(zip(a,b))
- return res#传入元组,或两个int。
- r = decrypt_file(input("请输入需要破解文件的文件名,无需格式后缀:")+'.docx')
- file = docx.Document()
- for i in r:
- file.add_paragraph(decrypt(*i))
- file.save("plaintext.docx")
- print('解密完成,请在当前文件夹下提取文件')
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|