本帖最后由 绯红の光 于 2023-8-17 15:52 编辑
没有文件的话无法判断,PDF本身的安全处理,PDF创建的时候可以设置密码和权限,但是只是在头尾部分添加几段特征信息好像,事实上把这些信息删除其实就不影响访问了,甚至不同PDF阅读软件打开,可以复制和打印的程度经常也是不一样的
根据你的描述感觉上不外乎下面两种可能;
1、文件本身没有问题,但通过WPS设置在线私密权限了,仅指定某人可以访问,而同时看文件的那台电脑登录的WPS账号就是可访问账户,所以可以打开和打印(不过可能性最小)
2、文件有可能是加密格式,据我了解,部分公司为了防止内容外协,有使用DES文件加密系统,文件创建自动加密,外发选择权限解密,有可能是对文件设置了仅单台电脑访问,第一次访问后记录硬件ID,返回到云端记录,以后就只有这台电脑可以打开(这部分可以试试下次接收到新文件后,在断网情况下能不能打开,如果能打开换另一台断网电脑,再联网这样试)
3、如果真是纯原始PDF的话,试试绕过解锁看看,现在很多在线PDF格式转换网站都支持删除密码
-- 看过文件了,可以确定就是第二种情况
这是一份图片档案的PDF打开后头部信息
这是加密PDF打开后显示的十六进制编码
在网上找了一份DES加密软件的截图,名字就不提了,可以看见使用电脑标识验证可以控制只在一台电脑上打开PDF,不勾选打包为exe和压缩包能够保证加密后文件格式仍旧为PDF,使用次数和联网,还有权限部分可以实现题中所说打印出是空白的情况,但是实际上通过新建一份PDF文件,然后将原PDF页面以图片形式插入,自己另存一份实际上是可以算作是“破解”的,至于将文件解密甚至脱壳,涉及到软件不同算法不同基本上等同于不可能,后文附上对PDF 进行DES 加密和解密的两段程序,可以对比下PDF文件识别后的样子
加密程序
[Python] 纯文本查看 复制代码 from tkinter import Tk, filedialog
from Crypto.Cipher import DES
from Crypto.Util.Padding import pad
import os
def encrypt_file(file_path):
# 读取文件内容
with open(file_path, 'rb') as file:
file_content = file.read()
# 使用 DES 加密
key = b'01234567' # DES 密钥,8 字节
cipher = DES.new(key, DES.MODE_ECB)
padded_content = pad(file_content, DES.block_size)
encrypted_content = cipher.encrypt(padded_content)
# 构建加密后的文件名
file_name = os.path.basename(file_path)
encrypted_file_name = f"加密_{file_name}"
# 写入加密后的文件
with open(encrypted_file_name, 'wb') as encrypted_file:
encrypted_file.write(encrypted_content)
print(f"文件 {file_name} 加密成功,加密后文件名为 {encrypted_file_name}")
# 创建 Tkinter 根窗口
root = Tk()
root.withdraw()
# 弹窗选择 PDF 文件
file_path = filedialog.askopenfilename(filetypes=[('PDF Files', '*.pdf')])
if file_path:
# 加密文件
encrypt_file(file_path)
else:
print("未选择文件")
解密程序
[Python] 纯文本查看 复制代码 import tkinter as tk
from tkinter import filedialog
from Crypto.Cipher import DES
from Crypto.Util.Padding import pad
import os
# 创建文件选择对话框
root = tk.Tk()
root.withdraw()
file_path = filedialog.askopenfilename(filetypes=[("PDF Files", "*.pdf")])
# 检查是否选择了文件
if not file_path:
print("未选择文件")
exit()
# 读取PDF文件内容
with open(file_path, "rb") as file:
file_content = file.read()
# 使用 DES 解密
key = b'01234567' # DES 密钥,8 字节
cipher = DES.new(key, DES.MODE_ECB)
padded_content = pad(file_content, DES.block_size)
decrypted_content = cipher.decrypt(padded_content)
# 获取原文件名和扩展名
file_name, file_ext = os.path.splitext(file_path)
# 构造解密后的文件路径和文件名
decrypted_file_path = file_name + "_decrypted" + file_ext
# 写入解密后的内容到文件
with open(decrypted_file_path, "wb") as decrypted_file:
decrypted_file.write(decrypted_content)
print("解密完成,解密后的文件保存为:", decrypted_file_path)
|