java itext 数字签名,这种itext数字签名的实现有什么问题?

karthick

2

java

itext

我从互联网上拿了一个示例代码,我尝试签署一份文件.

这是代码

public class SimpleSignature {

public static final String KEYSTORE = "c:/key/sano";

public static final char[] PASSWORD = "Chennai".toCharArray();

public static final String SRC = "c:/itext/unsigned.pdf";

public static final String DEST = "c:/itext/signed.pdf";

public void sign(String src, String dest,

Certificate[] chain, PrivateKey pk, String digestAlgorithm, String provider,

CryptoStandard subfilter, String reason, String location)

throws GeneralSecurityException, IOException, DocumentException {

// Creating the reader and the stamper

PdfReader reader = new PdfReader(src);

FileOutputStream os = new FileOutputStream(dest);

PdfStamper stamper = PdfStamper.createSignature(reader, os, '\0');

// Creating the appearance

PdfSignatureAppearance appearance = stamper.getSignatureAppearance();

appearance.setReason(reason);

appearance.setLocation(location);

appearance.setVisibleSignature(new Rectangle(36, 748, 144, 780), 1, "sig");

// Creating the signature

ExternalDigest digest = new BouncyCastleDigest();

ExternalSignature signature =

new PrivateKeySignature(pk, digestAlgorithm, provider);

MakeSignature.signDetached(appearance, digest, signature, chain,

null, null, null, 0, subfilter);

}

public static void main(String[] args)

throws GeneralSecurityException, IOException, DocumentException {

BouncyCastleProvider provider = new BouncyCastleProvider();

Security.addProvider(provider);

KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());

ks.load(new FileInputStream(KEYSTORE), PASSWORD);

String alias = (String)ks.aliases().nextElement();

PrivateKey pk = (PrivateKey) ks.getKey(alias, PASSWORD);

Certificate[] chain = ks.getCertificateChain(alias);

SimpleSignature app = new SimpleSignature();

app.sign(SRC, String.format(DEST, 1), chain, pk, DigestAlgorithms.SHA256,

provider.getName(), CryptoStandard.CMS, "Test 1", "Ghent");

app.sign(SRC, String.format(DEST, 2), chain, pk, DigestAlgorithms.SHA512,

provider.getName(), CryptoStandard.CMS, "Test 2", "Ghent");

app.sign(SRC, String.format(DEST, 3), chain, pk, DigestAlgorithms.SHA256,

provider.getName(), CryptoStandard.CADES, "Test 3", "Ghent");

app.sign(SRC, String.format(DEST, 4), chain, pk, DigestAlgorithms.RIPEMD160,

provider.getName(), CryptoStandard.CADES, "Test 4", "Ghent");

}

}

当我运行此代码.我收到了这个错误.

Exception in thread "main" java.lang.NoSuchMethodError: org.bouncycastle.asn1.ASN1Integer.(J)V

at com.itextpdf.text.pdf.security.PdfPKCS7.getEncodedPKCS7(PdfPKCS7.java:797)

at com.itextpdf.text.pdf.security.MakeSignature.signDetached(MakeSignature.java:149)

at org.allcolor.yahp.sample.SimpleSignature.sign(SimpleSignature.java:45)

at org.allcolor.yahp.sample.SimpleSignature.main(SimpleSignature.java:62)

知道为什么我得到这个错误.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值