教学服务系统

 找回密码
 立即注册
搜索
查看: 658|回复: 0

信息计算2019级1班6号马璐

[复制链接]

7

主题

15

帖子

71

积分

注册会员

Rank: 2

积分
71
发表于 2022-4-6 13:49:33 | 显示全部楼层 |阅读模式

第三次


加密
  1. from secrets import token_bytes
  2. from docx import Document
  3. import docx

  4. def random_key(length):
  5.     key = token_bytes(nbytes=length)# 函数接受一个int参数,用于指定随机字节串的长度。
  6.     key_int = int.from_bytes(key, 'big')# 把字节串转换为int,也就是我们需要的二进制数
  7.     return key_int

  8. def encrypt(raw):
  9.     raw_bytes = raw.encode()
  10.     raw_int = int.from_bytes(raw_bytes, 'big')#big为正序,little则输出反序。
  11.     key_int = random_key(len(raw_bytes))
  12.     return raw_int ^ key_int, key_int

  13. def decrypt(encrypted, key_int):
  14.     decrypted = encrypted ^ key_int
  15.     length = (decrypted.bit_length() + 7) // 8
  16.     decrypted_bytes = int.to_bytes(decrypted, length, 'big')
  17.     return decrypted_bytes.decode()

  18. def encrypt_file(path, key_path=None,):
  19.     document = Document(path)
  20.     all_paragraphs = document.paragraphs
  21.     file = docx.Document()
  22.     file2 = docx.Document()
  23.    
  24.     for paragraph in all_paragraphs:# 打印每一个段落的文字
  25.         ciphertext,key = encrypt(paragraph.text)

  26.         file.add_paragraph(str(ciphertext))
  27.         file.save('ciphertext.docx')

  28.         file2.add_paragraph(str(key))
  29.         file2.save("key.docx")

  30. encrypt_file(input('请输入需要加密的文件名(无需加格式后缀):')+'.docx')
  31. print("加密完成,请在当前文件夹下提取文件")
复制代码
解密:
  1. from secrets import token_bytes
  2. from docx import Document
  3. import docx

  4. def random_key(length):
  5.     key = token_bytes(nbytes=length)# 函数接受一个int参数,用于指定随机字节串的长度。
  6.     key_int = int.from_bytes(key, 'big')# 把字节串转换为int,也就是我们需要的二进制数
  7.     return key_int

  8. def encrypt(raw):
  9.     raw_bytes = raw.encode()
  10.     raw_int = int.from_bytes(raw_bytes, 'big')
  11.     key_int = random_key(len(raw_bytes))
  12.     return raw_int ^ key_int, key_int

  13. def decrypt(encrypted, key_int):
  14.     decrypted = encrypted ^ key_int
  15.     length = (decrypted.bit_length() + 7) // 8
  16.     decrypted_bytes = int.to_bytes(decrypted, length, 'big')
  17.     return decrypted_bytes.decode()

  18. a = []
  19. b = []

  20. def decrypt_file(path_encrypted, key_path=None, *, encoding='utf-8'):
  21.     document = Document(path_encrypted)
  22.     all_paragraphs = document.paragraphs

  23.     for i in all_paragraphs:
  24.         a.append(int(i.text))

  25.     for k in Document('key.docx').paragraphs:
  26.         key = int(k.text)
  27.         b.append(key)

  28.     res = list(zip(a,b))
  29.     return res#传入元组,或两个int。
  30. r = decrypt_file(input("请输入需要破解文件的文件名,无需格式后缀:")+'.docx')

  31. file = docx.Document()

  32. for i in r:
  33.     file.add_paragraph(decrypt(*i))

  34. file.save("plaintext.docx")
  35. print('解密完成,请在当前文件夹下提取文件')
复制代码



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

教学服务系统

GMT+8, 2025-5-6 09:47 , Processed in 0.015390 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表