【问题标题】:Library JAR with Bouncy Castle带充气城堡的图书馆 JAR
【发布时间】:2015-09-07 06:04:12
【问题描述】:

我正在处理一个包含多个子项目的项目,它们都使用我为散列、签名和加密消息创建的实用程序库。这个库基本上是充气城堡的包装。

当我运行与库关联的测试时,一切都通过了,一切正常。当我将实用程序库打包到 jar 中时,会发生两件事:

  1. 使用该库的子项目找不到与充气城堡关联的 jar。
  2. 即使我将充气城堡 jar 添加到正在使用该库的子项目中,该项目也找不到充气城堡安全提供程序“BC”

这是 intellij 中导出的实用程序 jar 的配置:

错误:

安全提供程序初始化:

为什么我不能导出包含安全提供程序的库?这是生成的类加载器的副作用吗?

提前致谢。

【问题讨论】:

  • 请注意,您只提到了bouncycastle,有 67 个关注者(其中大部分将处于非活动状态)。始终尝试添加“更高级别”标签,例如cryptography,以引起您的问题的注意(在一千万个问题之间)。
  • 感谢添加了新标签。

标签: java intellij-idea jar cryptography bouncycastle


【解决方案1】:

提供者需要签名。可能是您弄乱了验证程序,尽管这很难从远处分辨出来。如果您要重新打包 BC 提供程序,那么您肯定会遇到麻烦,并且使用不同的类加载器也很可能会混淆提供程序签名,是的。

另一个问题可能是您在构造函数中注册了提供程序。如果没有在提供者之前调用构造函数,那么您可能会遇到问题。通常,您应该尽早注册提供程序,即在用于您的应用程序的第一个类的静态代码块中。请注意,多次注册提供者没有风险 - 它只会发现一个已经以相同名称注册并且什么都不做。

【讨论】:

  • 有趣的是 Crypto 类是一个延迟初始化的单例。当我在静态块中使用提供程序反编译 Crypto 类时,它看起来与我在构造函数中使用它时相同(这可能是 intellij 在幕后进行静态类持有者模式优化)。不过,我确实在使用该类之前对其进行了初始化。所以我要看看如何重新打包 BC 提供程序。我认为它应该像任何其他 jar 一样工作,因为我在子项目的类路径中有它。
  • 在将 BC jar 与我的实用程序 jar 打包时仍然存在问题,但我想我可以期望我的子项目能够提供它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-30
  • 1970-01-01
  • 2013-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多