使用Ghostscript生成PDF 2.0加密文件为何采用过时RC4算法?
Ghostscript生成PDF 2.0加密文件却使用RC4算法的问题与解决
最近我碰到一个挺头疼的小问题:明明用Ghostscript生成了标注为PDF 2.0版本的加密PDF(这个版本本身支持Unicode密码保护),结果用pdfinfo工具检测时,却发现它用了已经过时的RC4加密算法。
我最初用的生成命令
当时执行的Ghostscript命令是这样的,本意是生成符合PDF 2.0标准的加密文件:
gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=protect.pdf -sOwnerPassword=pwd1 -sUserPassword=pwd2 -dCompatibilityLevel=2.0 test.pdf
检测结果
用pdfinfo验证加密情况时,执行了这条命令:
pdfinfo protect.pdf -upw pwd2
得到的检测信息里,关键的加密部分显示为RC4:
CreationDate: Sat Apr 21 09:10:14 2018 CEST
ModDate: Sat Apr 21 09:10:14 2018 CEST
Tagged: no
UserProperties: no
Encrypted: yes (RC4)
PDF version: 2.0
问题原因
查了Ghostscript的文档才搞明白:即使指定了-dCompatibilityLevel=2.0,它默认还是会 fallback 到RC4加密。这是因为Ghostscript默认没有启用AES加密选项,而AES才是PDF 2.0官方推荐的安全加密算法。
解决方法
要让生成的PDF 2.0文件使用符合标准的AES加密,只需要在命令里新增两个参数即可:
gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=protect.pdf -sOwnerPassword=pwd1 -sUserPassword=pwd2 -dCompatibilityLevel=2.0 -dUseAES=true -dEncryptionR=256 test.pdf
这两个参数的作用分别是:
-dUseAES=true:强制启用AES加密算法,替代默认的RC4-dEncryptionR=256:指定使用256位的AES加密,完全匹配PDF 2.0的安全要求
重新生成文件后再用pdfinfo检测,就能看到加密算法变成AES了,同时PDF版本依然保持2.0,完美解决了这个问题。
内容的提问来源于stack exchange,提问作者Manuel Rodriguez
相关产品推荐
相关产品推荐

