【发布时间】:2013-05-15 07:25:41
【问题描述】:
谁能给我一个使用 MSCAPI 和 ITEXT 从 USB 令牌签署 pdf 的简单示例。我不想使用固定的 ocsp 字符串。
我试图遵循这个 Digital Signature book 但它不起作用。我的代码是:
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");
它给了我以下错误:
java.lang.NullPointerException
我尝试使用 itext 5.2.1/itextpdf-5.3.5 和 bcmail-jdk16-1.46、bcprov-jdk16-1.46.jar、bctsp-jdk16-1.46.jar。
谁能帮忙?请.....
【问题讨论】:
-
你把证书路径放在哪里?
-
它不是我要使用的证书 (p12) 文件。我想加载 USB 驱动程序(来自 MSCAPI - Microsoft Cryptographic API)......
-
你的问题有矛盾。你说你读过我的书,但你仍在使用 setCrypto() 方法。如果你读过我的书,你就会知道这种方法不应该再使用了。
-
天哪!!!你是作家“布鲁诺”吗?首先,感谢你写了这么棒的书。对于像我这样的新手来说,它是一个宝藏。我尝试了很多代码,但没有一个真正起作用。我也试过你的代码。上面的代码只是我尝试过的众多代码之一。另外,作为一个完全新手,我不应该说,但我认为主要问题是,usb 令牌的密码提示应该出现在哪里,它没有出现在那里。你能给我一个示例,我的 USB 令牌(epass 令牌 1000)会要求提供密码吗?非常感谢布鲁诺。你是一个传奇............
标签: java encryption itext digital-signature mscapi