gpt4 book ai didi

java - 不想使用无限强度策略文件

转载 作者:可可西里 更新时间:2023-11-01 11:52:14 29 4
gpt4 key购买 nike

我想制作一个 Java 应用程序来制作签名,但遇到了无限强度策略文件的问题, 在许多帖子中讨论过,例如How to avoid installing "Unlimited Strength" JCE policy files when deploying an application?

当然,当我切换策略文件时一切正常,但我宁愿避免这种情况,因为我不打算使用对称加密,所以我猜这是可能的。我的问题是我已经在 KeyStore 的加载方法中得到非法 key 大小异常。

我的问题:

1) 我能否对 keystore 中的内部加密做任何事情,以便 key 大小限制不需要用户更改策略文件?

2) 我了解到 BouncyCaSTLe Lightweight API 可能是一个选项。如果是这样,我如何使用该 API 加载 keystore ?

Security.addProvider(new BouncyCastleProvider());           

//Get private key
KeyStore keyStore = KeyStore.getInstance("PKCS12","BC");
String pwd = "password";
FileInputStream finJKS = new FileInputStream("C:\\TEMP\\host.p12");
keyStore.load(finJKS,pwd.toCharArray());

运行: java.io.IOException: 异常解密数据 - java.security.InvalidKeyException: Illegal key size

在 Windows 上的 Netbeans 7.4 上的 JDK 7u51 中运行 jre。

最好的问候

最佳答案

尽管使用了 BouncyCaSTLe,您的代码片段仍会抛出 InvalidKeyException,因为您没有使用 BC Lightweight API。如果您通过 JCE API 访问 BC,那么与 Sun/Oracle 供应商一样,加密强度的限制同样适用。

PKCS#12文件通常使用3DES加密(pbeWithSHA1And3-KeyTripleDES-CBC),不受默认策略文件的限制。但是,PKCS#12 允许使用任意加密算法,因此您似乎得到了一个用另一种算法加密的 p12 文件。您可以使用 openssl 进行检查:

openssl pkcs12 -in host.p12 -info -noout

当您使用 keytool 将 keystore 转换为 JKS 或 JCEKS(更安全)时,加密算法应该会发生变化:

keytool -importkeystore -srckeystore host.p12 -srcstoretype PKCS12 -deststoretype JCEKS -destkeystore host.jks

当然你必须调整你的代码:

KeyStore keyStore = KeyStore.getInstance("JCEKS");

您甚至可以使用 key 工具将 JCEKS keystore 转换回 PKCS12。 Keytool 使用 pbeWithSHA1And3-KeyTripleDES-CBC 生成 PKCS12 文件。

关于java - 不想使用无限强度策略文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27897824/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com