使用ItextPDF

时间:2018-05-03 15:28:05

标签: java netbeans itext cypher sha

我正在关注此whitepaper

的示例

我制作了一个直接使用KeyStore来识别PDF的方法,它运行得很好。该方法正确签署PDF,没有任何错误

现在在下一个示例中,该方法被修改为使用.p12文件,我有这样的方法:

public void signp12() throws...
{
    BouncyCastleProvider provider = new BouncyCastleProvider();
        Security.addProvider(provider);

        KeyStore ks = KeyStore.getInstance("pkcs12", provider.getName());
        ks.load(new FileInputStream(PRIVATE), PASSWORD);
        String alias = (String) ks.aliases().nextElement();
        PrivateKey pk = (PrivateKey) ks.getKey(alias, PASSWORD);
        Certificate[] chain = ks.getCertificateChain(alias);
        Proveedor app = new Proveedor();
        app.firmar(SRC, String.format(DEST, 1), chain, pk, DigestAlgorithms.SHA256, provider.getName(), MakeSignature.CryptoStandard.CMS, "test1", "bla bla", PdfSignatureAppearance.NOT_CERTIFIED);
}

该方法抛出此异常

exception unwrapping private key - java.security.InvalidKeyException: Illegal key size
java.io.IOException
    at org.bouncycastle.jcajce.provider.keystore.pkcs12.PKCS12KeyStoreSpi.unwrapKey(Unknown Source)
    at org.bouncycastle.jcajce.provider.keystore.pkcs12.PKCS12KeyStoreSpi.engineLoad(Unknown Source)
    at java.security.KeyStore.load(KeyStore.java:1445)

我在this link读到它可能是JavaSecurity的一个问题,所以我用int maxKeyLength = Cipher.getMaxAllowedKeyLength("SHA");测试了maxlengh

我得到的最大长度是128.

我按照说明将从this file中提取的local_policy.jar和US_export_policy.jar复制到C:\ Program Files(x86)\ Java \ jre6 \ lib \ security然后重新编译,我再试一次并得到相同的错误,我也得到相同的maxlenght。

有关正在发生的事情的任何想法以及如何解决?

我正在使用windows7和JDK8

1 个答案:

答案 0 :(得分:0)

我使用this solution

解决了这个问题

基本上答案是海报制作了一种取消限制的反射方法