首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MSCAPI和ITEXT从usb标记签名PDF

使用MSCAPI和ITEXT从usb标记签名PDF
EN

Stack Overflow用户
提问于 2013-05-15 15:25:41
回答 3查看 2.6K关注 0票数 0

谁能给我一个简单的例子,从usb令牌使用MSCAPI和ITEXT的pdf签名。我不想使用固定的ocsp字符串。

我试图遵循这个 Digital Signature book ,但它不起作用。我的代码是:

代码语言:javascript
复制
        LoggerFactory.getInstance().setLogger(new SysoLogger());
        BouncyCastleProvider providerBC = new BouncyCastleProvider();
        Security.addProvider(providerBC);
        SunMSCAPI provdierMSCAP = new SunMSCAPI();
        Security.addProvider(provdierMSCAP);
        KeyStore ks = KeyStore.getInstance("Windows-MY");
        ks.load(null, null);

        String alias = (String)ks.aliases().nextElement();
        PrivateKey pk = (PrivateKey)ks.getKey(alias, null);
        Certificate[] chain = ks.getCertificateChain(alias);


        PdfReader pdfreader = new PdfReader("HelloWorld.pdf");
        FileOutputStream outputFile = new FileOutputStream("Signed.pdf");
        PdfStamper pdfstamper;

        pdfstamper =  PdfStamper.createSignature(pdfreader, outputFile, '\0', null, true);

        PdfSignatureAppearance sap = pdfstamper.getSignatureAppearance();
        sap.setCrypto(pk, chain, null, PdfSignatureAppearance.SELF_SIGNED);
        sap.setReason("Test");
        sap.setLocation("Dhaka");

        sap.setVisibleSignature(new Rectangle(10, 10, 50, 30), 1, "Test");
        pdfstamper.close();

        JOptionPane.showMessageDialog(null, "Successfully Signed");

它给了我以下错误:

代码语言:javascript
复制
        java.lang.NullPointerException

我尝试使用itext5.2.1/itextpdf-5.3.5和bcmail-jdk16-1.46,bcprov-jdk16-1.46.jar,bctsp-jdk16-1.46.jar。

有人能帮上忙吗?请...........

EN

回答 3

Stack Overflow用户

发布于 2013-05-15 15:32:23

您正在向load()传递空值,请尝试此操作

代码语言:javascript
复制
ks.load(new FileInputStream("certificate_path"), keystore_password.toCharArray());
票数 0
EN

Stack Overflow用户

发布于 2013-06-28 16:58:11

删除sap.setCrypto行。你不需要它。

票数 0
EN

Stack Overflow用户

发布于 2018-11-29 00:22:00

在最新版本中,setCrypo被替换为以下行:

代码语言:javascript
复制
ExternalDigest digest = new BouncyCastleDigest();
BouncyCastleProvider provider = new BouncyCastleProvider();
ExternalSignature signature = new PrivateKeySignature(key, DigestAlgorithms.SHA256, provider.getName());
MakeSignature.signDetached(sap, digest, signature, chain,   null, null, null, 0, CryptoStandard.CMS);

您必须将bcprov-jdk15on-1.60.jar和bcpkix-jdk15on-1.60.jar放在类路径中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16559148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档