Java 使用ItextPDF签名PDF时使用BouncyCastleProDriver非法设置密钥

Java 使用ItextPDF签名PDF时使用BouncyCastleProDriver非法设置密钥,java,netbeans,itext,cypher,sha,Java,Netbeans,Itext,Cypher,Sha,我正仿效这方面的例子 我制作了一个直接使用密钥库对PDF进行签名的方法,效果非常好。该方法在PDF上正确签名,没有任何错误 现在在下一个示例中,该方法被修改为使用.p12文件,我的方法如下: public void signp12() throws... { BouncyCastleProvider provider = new BouncyCastleProvider(); Security.addProvider(provider); KeyStor

我正仿效这方面的例子

我制作了一个直接使用密钥库对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)
我了解到这可能是JavaSecurity的一个问题,所以我使用
int maxKeyLength=Cipher.getMaxAllowedKeyLength(“SHA”)

我得到的最大长度是128

然后,我按照说明将从中提取的本地\u policy.jar和US\u export\u policy.jar复制到C:\Program Files(x86)\Java\jre6\lib\security,然后重新编译,重试,得到相同的错误,也得到相同的最大长度

对正在发生的事情有什么想法吗?我如何解决它

我正在使用windows7和JDK8

我使用

基本上,答案是海报采用反射方法来消除所有限制