验证数字签名PDF Spire.Pdf C#

时间:2017-08-17 14:53:16

标签: c# pdf digital-signature

所以我正在开发一个从部分视图生成PDF合同的Web应用程序,然后验证数字签名。我来了一个例子 here 。问题是在验证签名和我的生活时会抛出异常我无法弄清楚为什么......

以下是代码:

public async Task<ActionResult> Upload(HttpPostedFileBase FileUpload)
    {
        ActionResult retVal = View();
        AspNetUser user = DbCtx.AspNetUsers.Find(User.Identity.GetUserId());

        bool signitureIsValid = false;
        string blobUrl = string.Empty;

        if (FileUpload != null && FileUpload.ContentLength > 0)
        {
            string fileName = Guid.NewGuid().ToString() + RemoveAllSpaces(FileUpload.FileName);
            string filePath = Path.Combine(System.Web.Hosting.HostingEnvironment.MapPath("~/Content/pdfs"), fileName);

            FileUpload.SaveAs(filePath);

            List<PdfSignature> signatures = new List<PdfSignature>();
            using (var doc = new PdfDocument(filePath))
            {

                var form = (PdfFormWidget) doc.Form;
                int count = 0;
                try
                {
                    count = form.FieldsWidget.Count;
                }
                catch
                {
                    count = 0;
                }
                for (int i = 0; i < count; ++i)
                {
                    var field = form.FieldsWidget[i] as PdfSignatureFieldWidget;
                    if (field != null && field.Signature != null)
                    {
                        PdfSignature signature = field.Signature;
                        signatures.Add(signature);
                    }
                }
            }
            PdfSignature signatureOne = signatures[0]; 
            try
            {
                signitureIsValid = signatureOne.VerifySignature(); // HERE SHE BLOWS !
                if (signitureIsValid)
                {
                    blobPactUrl = await BlobUtil.BasicStorageBlockBlobOperationsAsync(System.IO.File.ReadAllBytes(filePath));
                    if (!string.IsNullOrEmpty(blobPactUrl))
                    {
                        ApplicantInfo info = DbCtx.ApplicantInfoes.FirstOrDefault(x => x.UserId == user.Id);
                        info.URL = blobUrl;
                        info.SignatureIsValid = true;
                        info.ActivationDate = DateTime.Now;
                        info.ActiveUntill = DateTime.Now.AddYears(1);

                        DbCtx.Entry(info).State = System.Data.Entity.EntityState.Modified;
                        DbCtx.SaveChanges();

                        retVal = RedirectToAction("Publications");
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                System.IO.File.Delete(filePath);
            }

        }
        return retVal;
    }      

这是一张图片 what it looks like when I'm debuging

我检查了签名,它是有效的和有效的......我知道我在这里缺少一些基本的东西......请帮助我上网!

1 个答案:

答案 0 :(得分:0)

仅注意到我发布了此信息。 。 。原来,问题出在软件包本身中。在向E-Iceblue的好心人问了问后,便重新创建,解决了该错误,并在一周内启用了新版本的Spire.PDF。

出色的工作E-Iceblue,效果很好:)