使用nimbus-jose和Java 6的ECDH + JWE加密

问题描述

我有问题,我想知道您是否可以帮助我。

我需要创建一个具有椭圆曲线的加密JWE。

我正在使用

jre 1.6.0,nimbus-jose-jwt-8.20-jdk6.jar,bcprov-jdk15to18-166.jar。

我用EC算法和椭圆曲线P-512创建了一个密钥库和一个密钥对。如果我使用私钥对JWT进行签名,然后尝试使用公钥对JWT进行验证,则一切正常,但是除了签名外,我还需要加密以制作一个JWE,其中看不到有效负载

当尝试使用公共密钥加密JWE时,它将引发以下异常

CMakeLists.txt

这是我用来加密的代码

cmake_minimum_required(VERSION 3.17)
project(project_1_cpp)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wconversion")
set(CMAKE_CXX_FLAGS_DEBUG_INIT "")
set(CMAKE_CXX_FLAGS_RELEASE_INIT "-O3")

add_custom_target(toku)
add_custom_command(
  TARGET toku
  COMMAND ${CMAKE_SOURCE_DIR}/lib/tdoku/BUILD.sh
  WORKING_DIR ${CMAKE_SOURCE_DIR}/lib/tdoku
)

file(GLOB project_1_src "*.cpp")
add_executable(project_1_cpp ${project_1_src})
add_dependencies(tdoku project_1_cpp)
target_link_libraries(project_1_cpp ${CMAKE_SOURCE_DIR}/lib/tdoku/build/libtdoku.a)

我在eclipe类路径中定义了很好的库。

尽管我的要求是使用椭圆曲线对JWE进行加密,但是我创建了测试证书RSA,因此我能够毫无问题地使用所述证书生成加密的JWE。

我还使用了一个非常简单的示例,将其放在https://connect2id.com/products/nimbus-jose-jwt/examples/jws-with-ec-signature页面上,这对我也不起作用。创建密钥对时,我会遇到相同的异常。

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)

NoClassDefFoundError异常表明负责动态类加载的类加载器找不到您要使用的类的.class文件,但是正如我之前所说,所有库都很好地包含在类路径中。

是否可能是我缺少要包含的自由主义?我不知道,我迷失了这个问题

解决方法

问题是nimbus-jose-jwt-8.20-jdk6.jar不支持在Java 6上运行,尽管其名称中出现了“ jdk6”。

您将看到错误,因为KeyUse类的const Discord = require("discord.js") module.exports = { name: 'servericon',aliases: ['svicon'],description: "",execute(client,message,args) { let img = `https://cdn.discordapp.com/icons/${message.guild.id}/${message.guild.icon}.png?size=2048` let icon = new Discord.MessageEmbed() .setDescription("group icon") .setImage(img) message.channel.send(icon) } }; 方法使用了java.util.Objects实用工具类中的方法,并且该类仅可从Java 7开始使用。

我会强烈建议至少从Java 6升级到Java 8。这样做肯定会解决这个问题。但是,如果您坚持使用Java 6,则必须get in contact with Connect2Id并要求他们提供支持。

,

我从connect2id收到了一个回复,告诉我这是一个问题,正如Luke所说的那样,有些东西是用Java 7编码的,这种情况就是其中之一。 最后,使用nimbus-jose-jwt-6.8-jdk6.jar尝试其他版本,最终一切都能按我的意愿进行。