将密码传递给pdf安全处理程序

时间:2017-03-23 13:08:39

标签: c# pdf pdftron

我目前正在开展一个项目,在成功的api调用返回密码后可以解密pdf。 我浏览过SO和pdftron SDK,但无法找到关于如何将此密码插入安全处理程序的明确解决方案。

我尝试过的事情:

GetSecurityHandler()方法似乎都没有处理密码:

 SecurityHandler handler = m_PdfDocument.GetSecurityHandler();

使用密码字符串但会抛出错误:

m_PdfDocument.InitStdSecurityHandler(pwd);

错误:消息:不是标准的安全处理程序。需要注册自定义过滤器。

根据消息判断我认为我需要m_PdfDocument.InitSecurityHandler(),但该方法不接受字符串,只有int。

任何人都可以让我走上正轨吗?

2 个答案:

答案 0 :(得分:1)

感谢您发送文件。此文件使用自定义加密进行加密。您的DRM。没有PDF阅读器可以打开文件,但是您自己的自定义PDF阅读器。

要使用PDFNet打开PDF,您需要首先了解文件的加密方式,并基本上做相反的事情。我认为进行加密的其他团队也在解密,至少是为了测试目的?

可能就像我们的Encryption sample中的示例3一样简单。在这种情况下,您只需要在其他团队使用的过滤器名称下注册。我想我知道那是什么,但不会在这里发帖,而是会给你发电子邮件。

但是对于其他人来说,如果使用名为" Frodo"的过滤器加密PDF,那么它将是

CreateDelegate frodo_del = new CreateDelegate(FrodoSecurityHandler.Create);
SecurityManagerSingleton.Instance().RegisterSecurityHandler("Frodo", new SecurityDescriptor("Frodo Security", frodo_del));

答案 1 :(得分:0)

根据this页面,在初始化另一个处理程序之后使用GetSecurityHandler(),因此InitSecurityHandler()采用int可以执行此操作

    string password = "9quali52ty3";

    // Convert the string into a byte[].
    byte[] asciiBytes = Encoding.ASCII.GetBytes(password);
    string compiledBytes = System.Text.Encoding.ASCII.GetString(asciiBytes);
    int convertedBytes = int.Parse(compiledBytes);
    m_PdfDocument.InitSecurityHandler(convertedBytes);
    m_PdfDocument.GetSecurityHandler();

编程的一个好的经验法则:始终有一种方法可以从一种数据类型转换到另一种数据类型。 感谢:@Brig Lamoreaux,@ Zanoni和@Brandon在以下页面。
Brig Zanoni Brandon