【问题标题】:java.lang.NoSuchFieldError: id_blake2s256 while using bouncycastlejava.lang.NoSuchFieldError: id_blake2s256 使用 bouncycastle
【发布时间】:2018-04-11 06:33:46
【问题描述】:

我正在尝试编写一个将用户数据存储在一个 App Engine 环境中的应用程序,该应用程序会生成唯一的 JWT 令牌,并且在其他 App Engine 环境中使用相同的令牌来验证用户。够简单吧?

现在 JWTToken 已创建(我能够在我的环境中本地解码,并且我有解密它的密钥)。但是,在应用引擎上,它会抛出一个奇怪的异常,如下所示。请注意,所有 jar 都已添加到 Eclipse 应用程序引擎项目中。此外,另一个也使用相同 API 生成令牌的应用程序引擎项目似乎工作正常。任何线索都会有很大帮助。

代码在以下行失败: java.security.Security.addProvider(new BouncyCastleProvider())

异常如下(我无法添加完整的堆栈跟踪,因为它引用了我们无法公开的代码)

java.lang.NoSuchFieldError: id_blake2s256 在 com.google.appengine.runtime.Request.process-e3210445ee703a77(Request.java) 在 org.bouncycastle.jcajce.provider.digest.Blake2s$Mappings.configure(未知来源) 在 org.bouncycastle.jce.provider.BouncyCastleProvider.loadAlgorithms(未知来源) 在 org.bouncycastle.jce.provider.BouncyCastleProvider.setup(未知来源) 在 org.bouncycastle.jce.provider.BouncyCastleProvider.access$000(未知来源) 在 org.bouncycastle.jce.provider.BouncyCastleProvider$1.run(未知来源) 在 java.security.AccessController.doPrivileged(AccessController.java:32) 在 org.bouncycastle.jce.provider.BouncyCastleProvider.(未知来源)

【问题讨论】:

    标签: bouncycastle


    【解决方案1】:

    能够按照以下程序解决此问题(我花了大约 4 个小时才最终得出此解决方案): 1.排除所有jar文件 2.将jar文件一一包含回来 3.最后把bouncycastle jar文件加回来

    为了回答 v6ak 的帖子,该应用程序之前确实可以运行,但由于某种原因,当我尝试将一段新代码推送到我的 GAE 环境时,一切都崩溃了,尽管本地环境继续顺利运行。

    【讨论】:

      【解决方案2】:

      您确定您在运行时使用的库与您用于编译的库相同吗?您似乎拥有不同版本的 BouncyCastle。

      首先,我对您的部署有所了解。但是在编译和运行期间仔细检查您是否使用相同的库版本是一个很好的第一步。

      其次,我检查 GAE 环境中是否存在 BouncyCastle。有一些这样的情况,比如在 Android 上,需要使用 SpongyCastle(BouncyCastle 的重命名版本):https://rtyley.github.io/spongycastle/

      【讨论】:

        猜你喜欢
        • 2020-07-06
        • 2021-01-06
        • 2011-09-11
        • 2018-03-21
        • 2015-10-10
        • 2013-06-05
        • 2013-01-04
        • 2020-04-11
        • 1970-01-01
        相关资源
        最近更新 更多