我目前正在开展一个项目,在成功的api调用返回密码后可以解密pdf。 我浏览过SO和pdftron SDK,但无法找到关于如何将此密码插入安全处理程序的明确解决方案。
我尝试过的事情:
GetSecurityHandler()
方法似乎都没有处理密码:
SecurityHandler handler = m_PdfDocument.GetSecurityHandler();
使用密码字符串但会抛出错误:
m_PdfDocument.InitStdSecurityHandler(pwd);
错误:消息:不是标准的安全处理程序。需要注册自定义过滤器。
根据消息判断我认为我需要m_PdfDocument.InitSecurityHandler()
,但该方法不接受字符串,只有int。
任何人都可以让我走上正轨吗?
答案 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