我正在关注此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