java策略文件_关于java:不想使用无限强度策略文件

我想制作一个可以进行签名但遇到无限强度策略文件的Java应用程序,

在许多帖子中讨论过,例如部署应用程序时如何避免安装"无限强度" JCE策略文件?

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

我的问题:

1)我可以对密钥库中的内部加密执行任何操作,以便密钥大小限制不要求用户更改策略文件吗?

2)我知道BouncyCastle轻量级API可能是一个选择。如果是这样,如何使用该API加载密钥库?

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:密钥大小非法

在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将密钥库转换为JKS或JCEKS(更安全)时,加密算法应会更改:

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

当然,您将必须修改代码:

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

您甚至可以使用keytool将JCEKS密钥库转换回PKCS12。 Keytool使用pbeWithSHA1And3-KeyTripleDES-CBC生成PKCS12文件。

非常感谢您提供的宝贵信息。 我测试了我的p12文件,它实际上使用了pbeWithSHA1And3-KeyTripleDES-CBC算法。 无论如何,当我在没有BouncyCastle的情况下进行测试时:KeyStore keyStore = KeyStore.getInstance(" PKCS12"); 然后,我对策略文件没有任何麻烦。 当我根据您的示例转换密钥库并使用" JCEKS"实例时,同样适用。

好吧,这是预期的行为。 BC和您的p12文件似乎存在一个奇怪的问题,因为无论您是否使用BC,它都没有什么区别(我实际上只是对我的一个p12文件进行了尝试)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值