如何确定PDF是否在JavaScript客户端加密

11

需要确定用户上传的PDF是否受密码保护,而不使用外部库。目前已经有了这个POC。

有人知道可能出现什么情况导致它无法正常工作吗?

<input type='file' onchange='openFile(event)'><br>
<script>
    var openFile = function (event) {

        var input = event.target;

        var reader = new FileReader();
        reader.onload = function (event) {
            console.clear();
            var contents = event.target.result;
            if (contents.indexOf('/Encrypt') !== -1) {
                console.log("Is encrypted");
            } else {
                console.log("Not encrypted");
            }
            console.log("File contents: " + contents);
        };

        reader.onerror = function (event) {
            console.error("File could not be read! Code "  +event.target.error.code);
        };

        reader.readAsText(input.files[0]);

    };
</script>

它按预期工作了吗? - Todarmal
是的,仍然按预期工作。 - haraise
1个回答

2
您可以使用以下代码来查找PDF是否已加密。
const reader = new FileReader();
reader.readAsArrayBuffer(file);
reader.onload = function () {

var files = new Blob([reader.result], {type: 'application/pdf'});
files.text().then(x=> {
    console.log("isEncrypted", x.includes("Encrypt"))
    console.log("isEncrypted", x.substring(x.lastIndexOf("<<"), x.lastIndexOf(">>")).includes("/Encrypt"));
    console.log(file.name);
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接