谁能给我一个简单的例子,从usb令牌使用MSCAPI和ITEXT的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我尝试使用itext5.2.1/itextpdf-5.3.5和bcmail-jdk16-1.46,bcprov-jdk16-1.46.jar,bctsp-jdk16-1.46.jar。
有人能帮上忙吗?请...........
发布于 2013-05-15 15:32:23
您正在向load()传递空值,请尝试此操作
ks.load(new FileInputStream("certificate_path"), keystore_password.toCharArray());发布于 2013-06-28 16:58:11
删除sap.setCrypto行。你不需要它。
发布于 2018-11-29 00:22:00
在最新版本中,setCrypo被替换为以下行:
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放在类路径中。
https://stackoverflow.com/questions/16559148
复制相似问题