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

har*_*ise 8 javascript pdf encryption passwords

需要确定用户上传的 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>
Run Code Online (Sandbox Code Playgroud)

小智 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);
});
Run Code Online (Sandbox Code Playgroud)