Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
Aspose.PDF for .NETは、キーストアの場所からデジタル署名を追加する機能を提供します。システムに接続された証明書ストア、スマートカード、またはPIVカードによって提供された証明書を受け入れることで署名を適用できます。
以下のコードスニペットは、Aspose.PDF.Drawingライブラリでも動作します。
スマートカードからPDF文書に署名するためのコードスニペットは次のとおりです。
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void GetSignatureInfo()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdf_SecuritySignatures();
// Open a document stream
using (var fs = new FileStream(dataDir + "blank.pdf", FileMode.Open, FileAccess.ReadWrite))
{
// Open PDF document from stream
using (var document = new Aspose.Pdf.Document(fs))
{
// Create a signature field
var field1 = new Aspose.Pdf.Forms.SignatureField(document.Pages[1], new Aspose.Pdf.Rectangle(100, 400, 10, 10));
// Sign with certificate selection in the windows certificate store
var store = new X509Store(StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
// Manually chose the certificate in the store
var sel = X509Certificate2UI.SelectFromCollection(store.Certificates, null, null, X509SelectionFlag.SingleSelection);
// Set an external signature settings
var externalSignature = new Aspose.Pdf.Forms.ExternalSignature(sel[0])
{
Authority = "Me",
Reason = "Reason",
ContactInfo = "Contact"
};
// Set a name of signature field
field1.PartialName = "sig1";
// Add the signature field to the document
document.Form.Add(field1, 1);
// Sign the document
field1.Sign(externalSignature);
// Save PDF document
document.Save(dataDir + "externalSignature1_out.pdf");
}
}
}
private static void VerifyExternalSignature()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdf_SecuritySignatures();
// Open PDF document
using (var document = new Aspose.Pdf.Document(dataDir + "externalSignature1.pdf"))
{
using (var pdfSign = new Aspose.Pdf.Facades.PdfFileSignature(document))
{
var sigNames = pdfSign.GetSignatureNames();
for (int index = 0; index <= sigNames.Count - 1; index++)
{
if (!pdfSign.VerifySignature(sigNames[index]))
{
throw new Exception("Not verified");
}
}
}
}
}
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private void SignWithSmartCard()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdf_SecuritySignatures();
// Open PDF document
using (var document = new Aspose.Pdf.Document(dataDir + "blank.pdf"))
{
using (var pdfSign = new Aspose.Pdf.Facades.PdfFileSignature())
{
// Bind PDF document
pdfSign.BindPdf(document);
// Sign with certificate selection in the windows certificate store
var store = new X509Store(StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
// Manually chose the certificate in the store
var sel = X509Certificate2UI.SelectFromCollection(store.Certificates, null, null, X509SelectionFlag.SingleSelection);
// Set an external signature settings
var externalSignature = new Aspose.Pdf.Forms.ExternalSignature(sel[0]);
pdfSign.SignatureAppearance = dataDir + "demo.png";
// Sign the document
pdfSign.Sign(1, "Reason", "Contact", "Location", true, new System.Drawing.Rectangle(100, 100, 200, 200), externalSignature);
// Save PDF document
pdfSign.Save(dataDir + "externalSignature2_out.pdf");
}
}
}
private static void VerifyExternalSignature()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdf_SecuritySignatures();
// Open PDF document
using (var document = new Aspose.Pdf.Document(dataDir + "externalSignature1.pdf"))
{
using (var pdfSign = new Aspose.Pdf.Facades.PdfFileSignature(document))
{
var sigNames = pdfSign.GetSignatureNames();
for (int index = 0; index <= sigNames.Count - 1; index++)
{
if (!pdfSign.VerifySignature(sigNames[index]))
{
throw new Exception("Not verified");
}
}
}
}
}
外部署名サービスにはExternalSignatureクラスを使用できます。ExternalSignatureはPKCS7およびPKCS7分離署名を作成します。 ExternalSignatureコンストラクタに希望のハッシュアルゴリズムを渡すことができます。非分離署名はSHA1のみを使用できます。 ハッシュアルゴリズムを明示的に指定しない場合は、自動的に選択されます。非分離署名の場合はSHA1、分離署名の場合はRSAキーに対してSHA-256が使用されます。ECDSAキーの場合、ハッシュサイズはキーサイズに依存します。
ExternalSignatureコンストラクタは、キー証明書も受け入れます(Base64形式である必要があります)。プライベートキーを含む証明書と、公開キーのみを含む証明書を渡すことができます。いずれの場合も、署名はCustomSignHashデリゲートコード内で外部で実行されますが、外部アルゴリズムは渡された証明書のキーに対応する署名を作成する必要があります。署名された文書を正しく生成するには証明書が必要です。ECDSA署名はSHA-1をサポートしていません。
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void SignWithExternalService()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdf_SecuritySignatures();
// Open PDF document
using (var document = new Aspose.Pdf.Document(dataDir + "blank.pdf"))
{
using (var sign = new Aspose.Pdf.Facades.PdfFileSignature())
{
// Bind PDF document
sign.BindPdf(document);
// Get public certificate
X509Certificate2 signerCert = GetPublicCertificate();
// Set a certificate and a digest algorithm
var signature = new Aspose.Pdf.Forms.ExternalSignature(signerCert, Aspose.Pdf.DigestHashAlgorithm.Sha256);
// Define a delegate to external sign
Aspose.Pdf.Forms.SignHash customSignHash = delegate(byte[] signableHash, Aspose.Pdf.DigestHashAlgorithm digestHashAlgorithm)
{
return CallExternalSignatureService(signableHash, digestHashAlgorithm);
};
// Set a sign hash
signature.CustomSignHash = customSignHash;
sign.Sign(1, "reason", "cont", "loc", false, new System.Drawing.Rectangle(0, 0, 500, 500), signature);
// Save PDF document
sign.Save(dataDir + "ExternalSignature_out.pdf");
}
}
}
private static X509Certificate2 GetPublicCertificate()
{
// Your code to get a public certificate. The certificate can be supplied by a third-party service or a smart card
}
private static byte[] CallExternalSignatureService(byte[] hash, Aspose.Pdf.DigestHashAlgorithm digestHashAlgorithm)
{
// Call a third-party service that provides a digital signature service
// The method must return signed data
// The digestHashAlgorithm argument points to the digest algorithm that was applied to the data to produce the value of the hash argument
}
署名を作成するには、将来のデジタル署名の長さの予備的な見積もりが必要です。 SignHashを使用してデジタル署名を作成する場合、文書保存プロセス中にデリゲートが2回呼び出されることがあります。 何らかの理由で2回の呼び出しを許可できない場合、たとえば、呼び出し中にPINコードの要求が発生する場合は、PKCS1、PKCS7、PKCS7Detached、およびExternalSignatureクラスの__AvoidEstimatingSignatureLength__オプションを使用できます。 このオプションを設定すると、期待される長さとして固定値__DefaultSignatureLength__を設定することで署名長さの見積もりステップを回避します。DefaultSignatureLengthプロパティのデフォルト値は3000バイトです。 AvoidEstimatingSignatureLengthオプションは、CustomSignHashプロパティにSignHashデリゲートが設定されている場合にのみ機能します。 結果として得られる署名の長さがDefaultSignatureLengthプロパティで指定された期待される長さを超えると、実際の長さを示す__SignatureLengthMismatchException__が発生します。 DefaultSignatureLengthパラメータの値は、任意に調整できます。
__ExternalSignature__の場合、CustomSignHashが使用されていなくてもAvoidEstimatingSignatureLengthオプションを使用できます。
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void SignWithExternalService()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdf_SecuritySignatures();
// Open PDF document
using (var document = new Aspose.Pdf.Document(dataDir + "blank.pdf"))
{
using (var sign = new Aspose.Pdf.Facades.PdfFileSignature())
{
// Bind PDF document
sign.BindPdf(document);
// Get public certificate
X509Certificate2 signerCert = GetPublicCertificate();
// Set a certificate and a digest algorithm
var signature = new Aspose.Pdf.Forms.ExternalSignature(signerCert, Aspose.Pdf.DigestHashAlgorithm.Sha256);
// Define a delegate to external sign
Aspose.Pdf.Forms.SignHash customSignHash = delegate(byte[] signableHash, Aspose.Pdf.DigestHashAlgorithm digestHashAlgorithm)
{
return CallExternalSignatureService(signableHash, digestHashAlgorithm);
};
// Set a sign hash
signature.CustomSignHash = customSignHash;
// Set an option to avoiding twice SignHash calling.
signature.AvoidEstimatingSignatureLength = true;
signature.DefaultSignatureLength = 3500;
sign.Sign(1, "reason", "cont", "loc", false, new System.Drawing.Rectangle(0, 0, 500, 500), signature);
// Save PDF document
sign.Save(dataDir + "ExternalSignature_out.pdf");
}
}
}
private static X509Certificate2 GetPublicCertificate()
{
// Your code to get a public certificate. The certificate can be supplied by a third-party service or a smart card
}
private static byte[] CallExternalSignatureService(byte[] hash, Aspose.Pdf.DigestHashAlgorithm digestHashAlgorithm)
{
// Call a third-party service that provides a digital signature service
// The method must return signed data
// The digestHashAlgorithm argument points to the digest algorithm that was applied to the data to produce the value of the hash argument
}
Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.