首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > PowerDesigner >

itext破译pdf不能复制

2012-06-28 
itext破解pdf不能复制记得以前看到pdf资料,看到感兴趣的,想复制下来。可是因为pdf安全设置的原因,不能复制。

itext破解pdf不能复制

记得以前看到pdf资料,看到感兴趣的,想复制下来。可是因为pdf安全设置的原因,不能复制。特别是看一些技术性文档,看到一些代码,想自己跑,看一下结果。结果却不能复制。但是一行一行敲代码,又是费时费力。不久前看itext源码,发现居然可以用再次加密的方式,改变pdf的权限。itext破译pdf不能复制

源码版本:itext5.0.5

条件:有文件打开密码

关键点:PdfReader.unethicalreading

?????????? ……

??????????? if (openPassword == null) {
??????????????? reader = new PdfReader(fis);
??????????? } else {
??????????????? reader = new PdfReader(fis, openPassword.getBytes());
??????????? }
??????????? PdfReader.unethicalreading = true;//不为true不能成功。

??????????? PdfEncryptor.encrypt(reader, fos, true, userPassword, OwnerPassword, PdfWriter.ALLOW_COPY | PdfWriter.ALLOW_PRINTING);

??????????? ……

?

是什么原因呢,看一下itext对打开权限判断:

??? /**
???? * Checks if the document was opened with the owner password so that the end application
???? * can decide what level of access restrictions to apply. If the document is not encrypted
???? * it will return <CODE>true</CODE>.
???? * @return <CODE>true</CODE> if the document was opened with the owner password or if it's not encrypted,
???? * <CODE>false</CODE> if the document was opened with the user password
???? */
??? public final boolean isOpenedWithFullPermissions() {
??????? return !encrypted || ownerPasswordUsed || unethicalreading;
??? }

而unethicalreading的定义又是:

?????? public static boolean unethicalreading = false;

所以,只要unethicalreading 是true,就会被认为是有权限的!而这个unethicalreading又是开放的,这是不是itext故意留的后门呢,哈哈?

通过这个代码,我们可以设置自己想要的权限。我们也有自己设置的打开密码和所有密码。

当然,这份pdf也会有一个带锁的标志。因为它是加密了的。

通过稍微改一下代码,我们就可以完全解密。呵呵,这里就不说了。

热点排行