【发布时间】:2019-01-01 23:10:25
【问题描述】:
我在文件中有一个用于 ex 的私钥。 “privatekey.pem”并且不知道如何创建ICipherParameters pk = ; 有人可以帮助我吗?
我正在尝试使用 iText7 签署 pdf。
using System;
using System.Drawing;
using System.Windows.Forms;
using Org.BouncyCastle.Crypto;
using System.Security.Cryptography.X509Certificates;
using iText.Signatures;
using System.IO;
using iText.Kernel.Pdf;
using Org.BouncyCastle.X509;
/* ..... */
protected void SignTest2()
{
bool isAppendMode = false;
string dest = "signtest.pdf";
string source = "test.pdf";
int certificationLevel = 1;
string reason = "Test reason";
string location = "Warsaw";
bool setReuseAppearance = false;
string name = "Test name";
ICipherParameters pk = ;
System.Security.Cryptography.X509Certificates.X509Certificate cert = new System.Security.Cryptography.X509Certificates.X509Certificate("fullchain.pem");
X509Certificate2 signatureCert = new X509Certificate2(cert);
Org.BouncyCastle.X509.X509Certificate bcCert = new X509CertificateParser().ReadCertificate(cert.GetRawCertData());
Org.BouncyCastle.X509.X509Certificate[] chain = new Org.BouncyCastle.X509.X509Certificate[1] { bcCert };
PdfReader reader = new PdfReader(source);
StampingProperties properties = new StampingProperties();
if (isAppendMode)
{
properties.UseAppendMode();
}
PdfSigner signer = new PdfSigner(reader, new FileStream(dest, FileMode.Create), true);
signer.SetCertificationLevel(certificationLevel);
PdfSignatureAppearance appearance = signer.GetSignatureAppearance().SetReason(reason).SetLocation(location
).SetReuseAppearance(setReuseAppearance);
signer.SetFieldName(name);
// Creating the signature
IExternalSignature pks = new PrivateKeySignature(pk, "SHA-512");
signer.SignDetached(pks, chain, null, null, null, 0, PdfSigner.CryptoStandard.CMS);
}
【问题讨论】:
-
我相信 ITextSharp 文档/网站有一些有效的例子你看过那里的网站,看看是否有任何有效的例子来说明如何至少做到这一点?
-
过去 5 个小时我一直在研究文档,不幸的是我没有找到任何可行的示例(我尝试了很多)
-
拥有
.pem文件并不能保证您拥有私钥。请参阅serverfault.com/questions/9708 如果您确定它确实包含私钥;使用工具创建.p12文件。.p12文件肯定包含一个公钥和一个私钥(并且还有一些其他优点)。我从未见过有人使用.pem文件来签署文件。这可以解释为什么你会找到任何关于它的文档。 -
我确定里面有 ptivate 键。即使这个stackoverflow.com/a/15901273/9004965 也不起作用。它在投射
(AsymmetricCipherKeyPair)new PemReader(reader).ReadObject();时抛出“invalidcastexception” -
好的,我解决了。