【问题标题】:iText pdf signature verification in androidandroid中的iText pdf签名验证
【发布时间】:2014-01-30 08:25:09
【问题描述】:

使用 iText 签署 PDf,但签名验证异常。请帮助我解决问题。 itext , spongy castle 库有哪些版本?

目前我正在使用

1.sc-light-jdk15on-1.47.0.2.jar

2.scpkix-jdk15on-1.47.0.0.jar

3.scprov-jdk15on-1.47.0.0.jar

4.itextg-5.4.5.jar

6.itext-2.1.7.jar

例外是:

java.lang.NoClassDefFoundError: org.bouncycastle.jce.provider.X509CertParser 01-30 13:45:36.569: E/AndroidRuntime(8059): at com.lowagie.text.pdf.PdfPKCS7.(未知来源)01-30 13:45:36.569:E/AndroidRuntime(8059):在 com.lowagie.text.pdf.AcroFields.verifySignature(来源不明)01-30 13:45:36.569:E/AndroidRuntime(8059):在 com.lowagie.text.pdf.AcroFields.verifySignature(来源不明)01-30 13:45:36.569:E/AndroidRuntime(8059):在 com.example.itextpdfsign.MainActivity.verifySignature(MainActivity.java:178) 01-30 13:45:36.569: E/AndroidRuntime(8059): 在 com.example.itextpdfsign.MainActivity.verifySignatures(MainActivity.java:165) 01-30 13:45:36.569: E/AndroidRuntime(8059): 在 com.example.itextpdfsign.MainActivity.onCreate(MainActivity.java:74) 01-30 13:45:36.569: E/AndroidRuntime(8059): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 01-30 13:45:36.569: E/AndroidRuntime(8059): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 01-30 13:45:36.569: E/AndroidRuntime(8059): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 01-30 13:45:36.569: E/AndroidRuntime(8059): 在 android.app.ActivityThread.access$1500(ActivityThread.java:117) 01-30 13:45:36.569:E/AndroidRuntime(8059):在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 01-30 13:45:36.569: E/AndroidRuntime(8059): 在 android.os.Handler.dispatchMessage(Handler.java:99) 01-30 13:45:36.569:E/AndroidRuntime(8059):在 android.os.Looper.loop(Looper.java:123) 01-30 13:45:36.569: E/AndroidRuntime(8059):在 android.app.ActivityThread.main(ActivityThread.java:3683) 01-30 13:45:36.569:E/AndroidRuntime(8059):在 java.lang.reflect.Method.invokeNative(Native Method) 01-30 13:45:36.569:E/AndroidRuntime(8059):在 java.lang.reflect.Method.invoke(Method.java:507) 01-30 13:45:36.569: E/AndroidRuntime(8059):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 01-30 13:45:36.569: E/AndroidRuntime(8059): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 01-30 13:45:36.569:E/AndroidRuntime(8059):在 dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

    标签: android itext digital-signature


    【解决方案1】:

    我在您的堆栈跟踪中发现了两件事:

    1. 我看到对我名字的引用:com.lowagie 表示您使用的是旧版 iText。此版本不应再用于specific reasons
    2. 我看到了对org.bouncycastle 的引用。这表明您没有使用 iText 的 Android 端口。

    您只需要iTextG。不要使用com.lowagie 的东西。不要引入不同版本的 BouncyCastle;改用 SpongyCastle。

    【讨论】:

    • @Bruno... 感谢您澄清我的疑问。我只有在执行签名验证码时才会遇到异常,即
    • public static PdfPKCS7 verifySignature(AcroFields fields, String name) throws GeneralSecurityException, IOException { System.out.println("签名覆盖整个文档:" + fields.signatureCoversWholeDocument(name)); System.out.println("文档修订:" + fields.getRevision(name) + " of " + fields.getTotalRevisions()); PdfPKCS7 pkcs7 = fields.verifySignature(name); System.out.println("完整性校验OK?" + pkcs7.verify());返回pkcs7; }
    • 在这里参考 PdfPKCS7 和 AcroFields iText-2.1.7jar 是必需的我收到错误...请让我知道 android 是否有任何其他版本...
    • 我检查了 jar-iTextG,其中包 com.itextpdf.text.pdf.security LtvVerification- 引用了 PdfPKCS7 和 AcroFields 意味着 iTextG for android 也需要这些类,请让我知道哪个 jar 包含这些类
    • AcroFields 是 iTextG 的一部分:sourceforge.net/p/itextg/code/HEAD/tree/trunk/src/main/java/com/…,PdfPKCS7 也是如此:sourceforge.net/p/itextg/code/HEAD/tree/trunk/src/main/java/com/… 所以当你说你需要另一个 jar 时,你必须更具体。
    猜你喜欢
    • 1970-01-01
    • 2018-06-25
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多