我在用
jre 1.6.0,nimbus-jose-jwt-8.20-jdk6.jar,bcprov-jdk15to18-166.jar。
我用EC算法和椭圆曲线P-512创建了一个密钥库和一个密钥对。如果我使用私钥对JWT进行签名,然后尝试使用公钥对其进行验证,那么一切都可以正常工作,但是除了签名之外,我还需要进行加密,以生成一个看不到有效负载的JWE。
Exception in thread "main" java.lang.NoClassDefFoundError: java/util/Objects
at com.nimbusds.jose.jwk.KeyUse.hashCode(KeyUse.java:121)
at java.util.HashMap.put(Unknown Source)
at com.nimbusds.jose.jwk.KeyUseAndOpsConsistency.<clinit>(KeyUseAndOpsConsistency.java:43)
at com.nimbusds.jose.jwk.JWK.<init>(JWK.java:197)
at com.nimbusds.jose.jwk.ECKey.<init>(ECKey.java:706)
at com.nimbusds.jose.jwk.ECKey$Builder.build(ECKey.java:571)
at com.nimbusds.jose.crypto.ECDHEncrypter.encrypt(ECDHEncrypter.java:217)
at com.nimbusds.jose.JWEObject.encrypt(JWEObject.java:370)
at pruebasJwt.inicioJwt.main(inicioJwt.java:373)
//encriptar token
ECPublicKey publicKey = (ECPublicKey) certificadoBean.getPublicKey();
Payload payload = new Payload(signedJWT2);
JWEObject jwe = new JWEObject(jweHeader, payload);
jwe.encrypt(new ECDHEncrypter(publicKey)); //**This is where the exception occurs**
String jweString = jwe.serialize();
String tokenJwt = signedJWT2.serialize();
System.err.println(tokenJwt);
我还在https://connect2id.com/products/nimbus-jose-jwt/examples/jws-with-ec-signature页面上使用了一个非常简单的示例,它对我来说也不起作用。当创建密钥对时,我会得到相同的异常。
public class JweEC {
public static void main(String[] args) {
System.out.println("############ INICIO JWE FIRMADO CON CERTIFICADO CURVA ELIPTICA ##############");
System.out.println("soporta ES512" + JCASupport.isSupported(JWSAlgorithm.ES512));
//Proveedor de criptografica
Provider bc = BouncyCastleProviderSingleton.getInstance();
Security.addProvider(bc);
System.out.println("soporta ES512" + JCASupport.isSupported(JWSAlgorithm.ES512));
try {
ECKey ecJWK = new ECKeyGenerator(Curve.P_521)
.generate(); **This is where the exception occurs**
ECKey ecPublicJWK = ecJWK.toPublicJWK();
}catch (Exception e) {
// TODO: handle exception
}
}
}
NoClassDefFoundError异常表明负责动态类加载的类加载器找不到试图使用的类的。class文件,但是正如我前面所说的,我的所有库都包含在类路径中。
是不是我错过了一些利比里亚的例子?我不知道,我被这个问题搞糊涂了
问题是nimbus-jose-jwt-8.20-jdk6.jar不支持在Java6上运行,尽管它的名称中出现了'jdk6'。
之所以出现错误,是因为KeyUse类的hashcode()
方法使用了Java.util.Objects
实用程序类中的一个方法,而该类仅在Java7以后可用。
我强烈建议至少从Java6升级到Java8。这样做肯定能解决这个问题。但是,如果您使用Java6,则必须与Connect2Id联系并请求他们的支持。
我试图在Android(Java)中实现ECDH加密/解密和JWE。 我找到了jose4j和Nimbus JOSE库,它们旨在做我需要的一切,但似乎比我想象的更具挑战性。 如果有人熟悉的话,那就是3D安全2.0。。。 在以下规范中: SDK=本地端 DS=目录服务器(另一边) 接下来是规范: 给定:P(DS)-EC公钥(以PEM格式提供,可以转换为PublicKey或JWK) 生成新的短暂密钥对(
我正在使用节点jose v0。11.0 (https://www.npmjs.com/package/node-jose)用于JWK和JWE操作。我有一个JWK格式的RSA密钥,可以加载到JWK密钥存储中,也可以再次提取。然而,当我尝试加密任何东西时,我会进入“error2”,“unsupported algorithm”。RSA怎么可能是不受支持的算法? 结果如下: 更新我在实际代码中挖掘了一点
对示例代码中应用的概念“带RSA加密的JSON Web令牌(JWT)”有疑问 参见:http://connect2id.com/products/nimbus-jose-jwt/examples/jwt-with-rsa-encryption 我的问题:为什么客户端使用私钥?为什么不在加密器上使用私钥,在解密器类上使用公钥呢? 欢迎对此RSA示例代码的概念方面进行澄清。
我们正在使用nimbus-jose-jwt第三方库中的RemoteJWKSet进行基于JWKSendpoint的JWT验证。 通过RemoteJWKSet,我们可以从远程endpoint检索JWK,检索到的JWK集被缓存,以便最大限度地减少网络调用。此外,它能够处理远程服务器上的密钥循环,因为每当密钥选择器试图获取带有未知子密钥的密钥时,缓存就会更新。 我的问题是,假设由于安全原因,从远程JWKS
我想这个问题不是上当,所以我会试着解释一下我的情况。 我正在测试JWT,更具体地说是来自Github的JOSE-JWT lib,但是我遇到了一些麻烦。 我使用PHP和PHPSeclib生成一个私钥-公钥对,并将公钥发送给客户机。一切都是正确的,正如你在那里看到的。我的客户机接收JSON并将其转换为对象,然后使用JSON.NET将其提取为字符串。 还有弹力城堡: 例外情况: CreateToken方
jose 是一个国际象棋工具,你可以把游戏存储在 MySQL 数据库中。