如何使用iTextSharp和c使用哈希字符串生成签名#
我试图在MakeSignature.SignExternalContainer中添加公钥字符串,但出现错误 字符串sing_测试="MiifmtccbbmgawiBagicMf8WdqyjkozihvcnaqwfDelmakGa1EbHMCSU4xKjObgnvBaotiu5TrewgZS1Hb3YgSW5McMfzHj1Y3CmUg1CmUzBd1Cd1Cd1CmUg2VyDbDxRob3JdHdDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDDBMOGE2YMVLZZJZIDGYZYZYZYXNJA0BGNVBC0DLQBSBnLoovVunze5NKNPAQVnTugZYYTv0CS3ZIDAMWZQKbBmUZZr9PWSNAR7WTB2MA74SZ4U2XZZYFNSH22YPD+YSBGQJTUD9XBhQQQQQQdaQabo4IbQb4IbKv0ObWNGCd7Bg7Bg7BgWbGb7BgWgWgWgWgWgWgWgWgWgWgWgWgWgWgWgWg8WgWgWgWgWgWgWgWg2L9WgWgWgWgWgWgWgWgWgWgWgWgWgWgWgWgWgWgWgWgWgUFBWICMFAATKFHZGHYXIGHZS1LWumtQMLv0cmljiensyxNzienLCNRPzMLJYXRILZC3VlzCBIESBOU0RMIGUTR292IELZC3VPBMCGQ0EGVGZDDAHBGNhreegjayGrztyW5P2HIZW5KCMv0cmVaz21WuY29TMBMGA1diWqmaqacebu2QI4QIgW4W0W9W0BaqfaoCaqeadQadbugW9W9W9W9W9W9W9W9W9W9W9W9W9W9W9W9W9W9W9W9W9W9W9W9W9W9W9W9W9W9W9W9W9W9W9W9W9W9W9W9W9W9W9W9W9W9V9V9FlDHHMKflMkG/ja3b6FWK1W/1L0/YJYPJL4E2UUU5TQ0T3K4ZOPAT95ZD8JRQWZ6SYYX1VXQLTRUB8EIAUVAJ92PRVOVxUSVUPZOLB3AOCKWER6JQGXOIWSSENQUUCUD3VWU5TZWW9OCPIDAKBUYWWTNTORFKMZVWD42JKHRF9J1SNBR4DYKOSKOSQR6CDZFUKW2GKWFCA=” 正在获取错误。。 签名验证期间出错。 BER解码时遇到错误:如何使用iTextSharp和c使用哈希字符串生成签名#,itext,signature,Itext,Signature,我试图在MakeSignature.SignExternalContainer中添加公钥字符串,但出现错误 字符串sing_测试="MiifmtccbbmgawiBagicMf8WdqyjkozihvcnaqwfDelmakGa1EbHMCSU4xKjObgnvBaotiu5TrewgZS1Hb3YgSW5McMfzHj1Y3CmUg1CmUzBd1Cd1Cd1CmUg2VyDbDxRob3JdHdDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxD
谢谢…如果我正确理解了您的代码(您在解释方面有些沉默寡言),首先调用返回哈希值的
GetBytesToSign
,然后对哈希进行签名,并使用EmbedSignature
将其嵌入。调用这些方法时使用哪些参数?如果使用第一个方法的pdf输出作为第二个方法的输入(我假设是因为这些方法的参数名称),然后您添加两个不同的签名字段,第一个字段中没有嵌入签名,第二个字段中嵌入了为第一个字段生成的签名……或者您是否使用原始PDF文件作为两个方法的输入,并丢弃第一个方法调用的输出PDF?在这种情况下,您将re是为您丢弃的不同范围生成的哈希的签名值。或者您是否仍在以其他方式使用您的代码?您试图用该证书做什么?顺便说一句,base 64编码字符串似乎以某种方式被破坏。谢谢,我想使用公钥在PDF上生成数字签名。请澄清您的问题;在我的ree初始评论我要求澄清一些方面。有人说……“我想使用公钥在PDF上进行数字签名。”-您知道您也需要私钥进行签名吗?(对于p12,显式是,对于HSM或签名服务,隐式是。)
byte[] rawData = System.Convert.FromBase64String(sing_test );
public static byte[] GetBytesToSign(string unsignedPdf, string tempPdf, string signatureFieldName)
{
using (PdfReader reader = new PdfReader(unsignedPdf))
{
using (FileStream os = File.OpenWrite(tempPdf))
{
PdfStamper stamper = PdfStamper.CreateSignature(reader, os, '\0');
PdfSignatureAppearance appearance = stamper.SignatureAppearance;
appearance.SetVisibleSignature(new iTextSharp.text.Rectangle(36, 748, 144, 780), 1, signatureFieldName);
IExternalSignatureContainer external = new ExternalBlankSignatureContainer(PdfName.ADOBE_PPKMS, PdfName.ADBE_PKCS7_SHA1);
MakeSignature.SignExternalContainer(appearance, external, 8192);
stamper.Close();
return SHA1Managed.Create().ComputeHash(appearance.GetRangeStream());
}
}
}
public static void EmbedSignature(string tempPdf, string signedPdf, string signatureFieldName, byte[] signedBytes)
{
using (PdfReader reader = new PdfReader(tempPdf))
{
using (FileStream os = File.OpenWrite(signedPdf))
{
PdfStamper st = PdfStamper.CreateSignature(reader, os, '\0', null, true);
PdfSignatureAppearance sap = st.SignatureAppearance;
sap.Reason = "Testing";
sap.Location = "Test";
sap.SetVisibleSignature(new iTextSharp.text.Rectangle(250, 50, 50, 100), 1, null);
IExternalSignatureContainer external = new MyExternalSignatureContainer(signedBytes);
try
{
MakeSignature.SignExternalContainer(sap, external, 8192);
}
catch (Exception ex) { }
st.Close();
}
}
}
private class MyExternalSignatureContainer : IExternalSignatureContainer
{
private readonly byte[] signedBytes;
public MyExternalSignatureContainer(byte[] signedBytes)
{
this.signedBytes = signedBytes;
}
public byte[] Sign(Stream data)
{
return signedBytes;
}
public void ModifySigningDictionary(PdfDictionary signDic)
{
}
}