使用bouncycastle时java.lang.NoSuchFieldError:id_blake2s256

时间:2018-04-11 06:33:47

标签: bouncycastle

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

现在JWTToken被创建了(我能够在我的env本地解码,并且我有解密它的密钥)。但是,在app引擎上,它会抛出一个奇怪的异常,如下所示。请注意,所有jar都已添加到Eclipse app引擎项目中。此外,另一个也使用相同的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。(未知来源)

2 个答案:

答案 0 :(得分:1)

能够通过以下程序解决此问题(我花了大约4个小时才最终达到此解决方案): 1.排除所有jar文件 2.逐个包含jar文件 3.最后添加bouncycastle jar文件

要回答v6ak的帖子,该应用程序之前确实正在运行,出于某种原因,当我试图将一段新代码推送到我的GAE环境时,所有地狱都崩溃了,尽管当地环境继续工作没有顺利。

答案 1 :(得分:0)

您确定在运行时使用的库与用于编译的库相同吗?看起来你有不同版本的BouncyCastle。

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

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