0

PDF ドキュメントにタイム スタンプを追加したい (デジタル署名なし)。これどうやってするの?

私は Itext を使用してデジタル署名でそれを行うことができます (私はここに TSAClient を持っています):

MakeSignature.signDetached(appearance, digest, signature, chain, null, null, tsa, 0, subfilter);

しかし、デジタル署名なしで同様のことを行う方法は? Bouncy Castle または Itext または Pdfbox を使用して... または別のライブラリを使用して..

4

3 に答える 3

4

あなたが探しているiTextで

LtvTimestamp.timestamp(appearance, tsa, signatureName);

また、参照してください。JavaDoc ドキュメント:

/**
 * Signs a document with a PAdES-LTV Timestamp. The document is closed at the end.
 * @param sap the signature appearance
 * @param tsa the timestamp generator
 * @param signatureName the signature name or null to have a name generated
 * automatically
 * @throws DocumentException 
 * @throws IOException 
 * @throws GeneralSecurityException
 */

コンテキストで使用するために、セクション 5.4.1のドキュメント セキュリティ ストア (DSS) およびPDF ドキュメントのデジタル署名へのドキュメント レベルのタイムスタンプの追加をお読みになることをお勧めします。

ドキュメント レベルのタイム スタンプは、古い PDF ビューアでは適切に認識されないことに注意してください。これは、PDF の世界に登場したのはかなり最近 ( PAdES-4など) にすぎないためです。

于 2013-06-24T12:15:54.357 に答える
2

PDFBox でこれを行うには、次のような単純な SignatureInterface 実装が必要です。

public class TimestampSignatureImpl implements SignatureInterface {
    private TSAClient tsaClient;
    public TimestampSignatureImpl(TSAClient tsaClient) {
        super();
        this.tsaClient = tsaClient;
    }
    @Override
    public byte[] sign(InputStream paramInputStream) throws IOException {
        return tsaClient.getTimeStampToken(IOUtils.toByteArray(paramInputStream));
    }
}

そして、次のようないくつかの PDSignature:

PDSignature signature = new PDSignature();
signature.setFilter(PDSignature.FILTER_ADOBE_PPKLITE); 
signature.setSubFilter(COSName.getPDFName("ETSI.RFC3161"));
signature.setSignDate(Calendar.getInstance());

次に、次のように PDF に署名します。

PDDocument pdf = PDDocument.load(inputFile);
MessageDigest digest = MessageDigest.getInstance("SHA-256");
TSAClient tsaClient = new TSAClient(new URL("your time stamp authority"), null, null, digest);
pdf.addSignature(signature, new TimestampSignatureImpl(tsaClient));
pdf.saveIncremental(new FileOutputStream(outputFile));
pdf.close();

PS: TSAClient は PDFBox の例から取られています。

于 2016-11-02T16:59:53.837 に答える
0

使用すると、次のクラスのメソッドを呼び出すことで(ドキュメント タイムスタンプ)iText7を追加できます。DTS PdfSigner

ITSAClient tsa = new TSAClientBouncyCastle(tsaUrl, tsaUser, tsaPass);
pdfSigner.timestamp(tsa, "SignatureTimeStamp");

また

ITSAClient tsa = new TSAClientBouncyCastle(tsaUrl, tsaUser, tsaPass, 8192, "SHA-256"); 
pdfSigner.timestamp(tsa, "SignatureTimeStamp");

また、Javaのドキュメント

/**
 * Signs a document with a PAdES-LTV Timestamp. The document is closed at the end.
 * NOTE: This method closes the underlying pdf document. This means, that current instance
 * of PdfSigner cannot be used after this method call.
 *
 * @param tsa           the timestamp generator
 * @param signatureName the signature name or null to have a name generated
 *                      automatically
 * @throws IOException
 * @throws GeneralSecurityException
 */
于 2021-06-11T19:06:54.213 に答える