2

我在 C# .net 应用程序中要求能够向文档添加多个数字签名。该文档将作为模板上传,然后经过多个处理阶段(邮件合并),然后将被下载。要求有多个参与方各自对其进行数字签名。

我有以下问题

1)是否每个人都需要单独的证书才能签名。2) 我可以选择在网络服务器上安装 office 还是购买 3rd 方组件。3) 我将非常感谢 c#/.net 中的任何示例(使用 docx 或 pdf 来证明这一点)

4

2 回答 2

1
  1. 每个人通常为自己签署文件,从而确认他是作者或他授权文件。在这种情况下,他/她使用自己的证书和私钥。也有可能几个人共享同一个证书和一个密钥(例如,几个 VP,他们每个人都有权批准某个文件)。

  2. 您可以使用一些 Office 自动化,也可以使用一些第三方库,例如我们的SecureBlackbox(除其他功能外,它还支持 PDF 签名、Office 文档签名和使用特定格式签名标准的 XML 签名,以及 CMS/CAdES“通用”签名) )。示例包含在可下载的包中。

请注意,PDF 格式不支持拥有多个独立签名。Office 签名格式确实支持独立签名(此外,无法以二进制格式进行会签)。

于 2013-08-27T09:48:07.470 回答
1

下面我使用 DocuSign WebService 编写代码来发送要由多方签名的文档:您可以从他们的站点获取 WebService(.asmx) url,以及如何将其添加Service Reference到您的项目中的步骤。

您可以从此处获取有关信封或标签的详细信息

Envelope envelope = new Envelope();
envelope.Subject = subject;
envelope.EmailBlurb = "This is Awesome. Kung fu Panda is just awesome";
envelope.AccountId = ConfigurationManager.AppSettings["APIAccountId"];

Recipient recipient = new Recipient();
recipient.UserName = name;
recipient.Email = txtRecipientEmail.Text;
recipient.ID = "1";
recipient.Type = RecipientTypeCode.Signer;

//here you can add multiple recipients
envelope.Recipients = new Recipient[] { recipient };


Document document = new Document();
document.PDFBytes =  FileHelper.StreamToByteArray(fileUploadTool1.FileContent );
document.FileExtension = Path.GetExtension(fileUploadTool1.PostedFile.FileName);
document.Name = Path.GetFileName(fileUploadTool1.PostedFile.FileName);
document.ID = "1";
envelope.Documents = new Document[] { document };

Tab tab1 = new Tab();
tab1.RecipientID = "1";
tab1.PageNumber = "1";
tab1.DocumentID = "1";
tab1.Type = TabTypeCode.SignHere;
tab1.XPosition = "50";
tab1.YPosition = "200";

Tab tab2 = new Tab();
tab2.RecipientID = "1";
tab2.PageNumber = "1";
tab2.DocumentID = "1";
tab2.Type = TabTypeCode.DateSigned;
tab2.XPosition = "110";
tab2.YPosition = "225";

envelope.Tabs = new Tab[] { tab1, tab2 };
APIServiceSoapClient proxy = Get_Proxy();
EnvelopeStatus status = proxy.CreateAndSendEnvelope(envelope);
StatusLabel.Text = "The envelope is " + status.Status.ToString() + ".";
于 2013-08-27T08:17:30.280 回答