当加密令牌以字符串形式存在时,如何在 Java 中解密使用 JWE 加密的 JWT?

Has*_*ari 3 java encryption jwt jwe

我有一个字符串格式的令牌,例如:

eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkExMjhHQ00ifQ.K52jFwAQJH-DxMhtaq7sg5tMuot_mT5dm1DR_01wj6ZUQQhJFO02vPI44W5nDjC5C_v4pW1UiJa3cwb5y2Rd9kSvb0ZxAqGX9c4Z4zouRU57729ML3V05UArUhck9ZvssfkDW1VclingL8LfagRUs2z95UkwhiZyaKpmrgqpKX8azQFGNLBvEjXnxxoDFZIYwHOno290HOpig3aUsDxhsioweiXbeLXxLeRsivaLwUWRUZfHRC_HGAo8KSF4gQZmeJtRgai5mz6qgbVkg7jPQyZFtM5_ul0UKHE2y0AtWm8IzDE_rbAV14OCRZJ6n38X5urVFFE5sdphdGsNlA.gjI_RIFWZXJwaO9R.oaE5a-z0N1MW9FBkhKeKeFa5e7hxVXOuANZsNmBYYT8G_xlXkMD0nz4fIaGtuWd3t9Xp-kufvvfD-xOnAs2SBX_Y1kYGPto4mibBjIrXQEjDsKyKwndxzrutN9csmFwqWhx1sLHMpJkgsnfLTi9yWBPKH5Krx23IhoDGoSfqOquuhxn0y0WkuqH1R3z-fluUs6sxx9qx6NFVS1NRQ-LVn9sWT5yx8m9AQ_ng8MBWz2BfBTV0tjliV74ogNDikNXTAkD9rsWFV0IX4IpA.sOLijuVySaKI-FYUaBywpg
Run Code Online (Sandbox Code Playgroud)

现在我想通过一些 java 库解密这个 String 并最终想要访问有效负载。到目前为止有人这样做过吗?

Flo*_*lli 6

您与我们分享的断言是在其紧凑表示中序列化的 JWE 。它有 5 个部分,由一个点 ( .)分隔,它们是:

  • 第 1 部分:标题 ( eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkExMjhHQ00ifQ)
  • 第 2 部分:加密密钥 -根据算法,它可能是一个空字符串- ( K52jFwAQJH-DxMhtaq7sg5tMuot_mT5dm1DR_01wj6ZUQQhJFO02vPI44W5nDjC5C_v4pW1UiJa3cwb5y2Rd9kSvb0ZxAqGX9c4Z4zouRU57729ML3V05UArUhck9ZvssfkDW1VclingL8LfagRUs2z95UkwhiZyaKpmrgqpKX8azQFGNLBvEjXnxxoDFZIYwHOno290HOpig3aUsDxhsioweiXbeLXxLeRsivaLwUWRUZfHRC_HGAo8KSF4gQZmeJtRgai5mz6qgbVkg7jPQyZFtM5_ul0UKHE2y0AtWm8IzDE_rbAV14OCRZJ6n38X5urVFFE5sdphdGsNlA)
  • 第 3 部分:初始化向量 - IV取决于算法,它可能是一个空字符串- ( gjI_RIFWZXJwaO9R)
  • 第 4 部分:密文 ( oaE5a-z0N1MW9FBkhKeKeFa5e7hxVXOuANZsNmBYYT8G_xlXkMD0nz4fIaGtuWd3t9Xp-kufvvfD-xOnAs2SBX_Y1kYGPto4mibBjIrXQEjDsKyKwndxzrutN9csmFwqWhx1sLHMpJkgsnfLTi9yWBPKH5Krx23IhoDGoSfqOquuhxn0y0WkuqH1R3z-fluUs6sxx9qx6NFVS1NRQ-LVn9sWT5yx8m9AQ_ng8MBWz2BfBTV0tjliV74ogNDikNXTAkD9rsWFV0IX4IpA)
  • 第 5 部分:附加身份验证数据 - AAD - ( sOLijuVySaKI-FYUaBywpg)

标题至少表明

在您的情况下, The algisRSA-OAEP和 the encis A128GCM。根据这些算法,您应该有一个 RSA 私钥来解密 CEK,然后使用它来解密密文。

接受的答案中提到的https://jwt.io没有用,因为它不支持 JWE,但支持 JWS。使用 JWE 输入显示的结果不会为您提供解密的有效负载。但是,https://connect2id.com/products/nimbus-jose-jwt资源将帮助您,因为似乎支持用于您的令牌的算法。