当前位置: 首页 > 知识库问答 >
问题:

Bouncy Castle升级版本1.60和1.6.1或更高版本

秦弘亮
2023-03-14

bcprov-jdk15on-160.jarbctls-jdk15on-160.jar升级到bcprov-jdk15on-161.jarbctls-jdk15on-161.jar或更高版本时,我们遇到一个问题

java.lang.InternalError:无法在org.bouncycastle.jcajce.provider.drbg.drbg$urlseededsecurerandom$1上打开随机源。在org.bouncycastle.jcajce.provider.drbg.drbg$urlseededsecurerandom$1上运行(drbg.java:294)。在.Reflect.NativeConstructorAccessorImpl.NewInstance(NativeConstructorAccessorImpl.java:39)位于Sun.Reflect.DelegatingConstructorAccessorImpl.NewInstance(DelegatingConstructorAccessorImpl.27)位于java.lang.Reflect.Constructor.NewInstance(DelegatingConstructorAccessorImpl.NewInstance)位于java.lang.Reflect.Constructor.NewInstance(

多谢了。

public class BCUpgradeTest {

    public static void main(String[] args) {
        try {
            Security.insertProviderAt(new BouncyCastleJsseProvider(), 1);
            Security.insertProviderAt(new BouncyCastleProvider(), 1);
            KeyAgreement ka = KeyAgreement.getInstance("ECDH");
            System.out.println(ka.getProvider().getName());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

共有1个答案

汪典
2023-03-14

Thanks multipybyzer0您的代码解决了关于

java.lang.InternalError:无法打开随机源

bcprov-jdk15on-162.jarbctls-jdk15on-162.jar仍然存在另一个问题

import java.lang.reflect.Field;
import java.security.Provider;
import java.security.Security;
import java.util.Properties;

import javax.crypto.KeyAgreement;

import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.jsse.provider.BouncyCastleJsseProvider;

public class BCUpgradeTest {

    public static void main(String[] args) {
        try {
            Field propsField = Security.class.getDeclaredField("props");
            propsField.setAccessible(true);
            Properties props = (Properties) propsField.get(null);
            props.remove("securerandom.source");
        } catch (Exception e) {
            System.err.println("Unable to modify java.lang.Security properties!");
            System.err.println("BouncyCastle DRBG may fail.");
        }

        try {
            BouncyCastleJsseProvider jsseProvider = new BouncyCastleJsseProvider();
            int jssePos = Security.insertProviderAt(jsseProvider, 1);
            BouncyCastleProvider castleProvider = new BouncyCastleProvider();
            int bcPos = Security.insertProviderAt(castleProvider, 1);

            System.out.println("jssePos = " + jssePos);
            System.out.println("bcPos = " + bcPos);

            System.out.println(castleProvider.getVersion());
            System.out.println(BCUpgradeTest.class.getClassLoader().getResource("org/bouncycastle/LICENSE.class"));

            Provider[] providers = Security.getProviders();
            for (int i = 0; i < providers.length; i++) {
                System.out.println("name : " + providers[i].getName() + "; version = " + providers[i].getVersion());
            }

            KeyAgreement ka = KeyAgreement.getInstance("ECDH", castleProvider);
            System.out.println(ka.getProvider().getName());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

下面是控制台的输出

jssePos = 1
bcPos = 1
1.62
jar:file:/D:/Eclipse/workspace/BCTestProject/libs/bcprov-jdk15on-162.jar!/org/bouncycastle/LICENSE.class
name : BC; version = 1.62
name : BCJSSE; version = 1.0009
name : SUN; version = 1.6
name : SunRsaSign; version = 1.5
name : SunJSSE; version = 1.6
name : SunJCE; version = 1.6
name : SunJGSS; version = 1.0
name : SunSASL; version = 1.5
name : XMLDSig; version = 1.0
name : SunPCSC; version = 1.6
name : SunMSCAPI; version = 1.6

请注意,我使用的是官方的jar文件,没有进行任何修改。

 类似资料:
  • 就在这一天,我和Gradle之间有个问题。就在最近,它工作得很好,我现在什么都没做,我看到了这一点。请帮忙。

  • 0.2.X

  • 从 0.8.x, 0.9.x, 0.10.0.x, 0.10.1.x, 0.10.2.x, 0.11.0.x 升级到1.0.0 Kafka 1.0.0 介绍了通信协议方面的改变。 遵循下面的滚动升级计划,可以保证您在升级过程中不用停机。 在升级之前,请先查看1.0.0版本中显著的变化。 滚动升级计划: 更新所有代理上的server.properties 并添加以下属性: CURRENT_KAFKA

  • 无非就3个原因吧 为了fix bug 为了新特性 为了爱,就是要追新 从1.a.38开始的版本,升级到最新版的成本都不大. 做到100%兼容是不现实的,但可以肯定的是, 遇到的问题的均有解决的办法. 有些兼容性问题,属于"错误"得到修正,老版本能这样写是"bug", ^_^ 这是一个汇总帖子,随时更新, 也会按版本的增长继续增长.... 请先浏览当前版本到最新版的发行注记,然后再看本列表 IE下a

  • 我最近安装了Angular 6,并想重新使用Angular 5.2如何将我的Angular版本从我拥有的任何版本更改为我选择的任何版本?

  • 2020年,四大主流浏览器计划不再支持 TLS 1.0 和 1.1。这些旧版本容易受到攻击和利用,不再具备实用性。 通过与 Mozilla 的合作,在你使用的系统中至少有一个仅使用 TLS 1.0 或 1.1,你可以在下面找到它们。 一旦浏览器终止对这些旧协议的支持,该系统将无法建立HTTPS 连接。 现在请尽快启用或升级到 TLS 1.2 或 1.3,以防止中断、停机和用户不满的事件发生。 您的