2017-02-27 1 views
1

Ich habe ein Token in String-Format wie:Wie entschlüsselt man eine JWT in Java, die mit JWE verschlüsselt ist, wenn das verschlüsselte Token in Form von String vorhanden ist?

eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkExMjhHQ00ifQ.K52jFwAQJH-DxMhtaq7sg5tMuot_mT5dm1DR_01wj6ZUQQhJFO02vPI44W5nDjC5C_v4pW1UiJa3cwb5y2Rd9kSvb0ZxAqGX9c4Z4zouRU57729ML3V05UArUhck9ZvssfkDW1VclingL8LfagRUs2z95UkwhiZyaKpmrgqpKX8azQFGNLBvEjXnxxoDFZIYwHOno290HOpig3aUsDxhsioweiXbeLXxLeRsivaLwUWRUZfHRC_HGAo8KSF4gQZmeJtRgai5mz6qgbVkg7jPQyZFtM5_ul0UKHE2y0AtWm8IzDE_rbAV14OCRZJ6n38X5urVFFE5sdphdGsNlA.gjI_RIFWZXJwaO9R.oaE5a-z0N1MW9FBkhKeKeFa5e7hxVXOuANZsNmBYYT8G_xlXkMD0nz4fIaGtuWd3t9Xp-kufvvfD-xOnAs2SBX_Y1kYGPto4mibBjIrXQEjDsKyKwndxzrutN9csmFwqWhx1sLHMpJkgsnfLTi9yWBPKH5Krx23IhoDGoSfqOquuhxn0y0WkuqH1R3z-fluUs6sxx9qx6NFVS1NRQ-LVn9sWT5yx8m9AQ_ng8MBWz2BfBTV0tjliV74ogNDikNXTAkD9rsWFV0IX4IpA.sOLijuVySaKI-FYUaBywpg 

Jetzt habe ich diesen String durch einige Java-Bibliothek entschlüsseln wollen und schließlich die Nutzlast zuzugreifen. Hat das bisher jemand gemacht?

Antwort

2

Sie wahrscheinlich brauchen nicht unbedingt eine Bibliothek:

String token = eyJ....; 
String[] splitToken = JWTEncoded.split("\\."); 

// splitToken[0] is the header, splitToken[1] is the payload and 
// splitToken[2] is the signature 
byte[] decodedBytes = Base64.decode(splitToken[1], Base64.URL_SAFE); 

// You don't have to convert it to string but it really depends on what type 
// data you expect 
String payload = new String(decodedBytes, "UTF-8"); 

https://jwt.io hat eine nette kleine Decrypter für Sie Daten zu testen

Hinsichtlich der einzige Bibliothek JWE ich finden konnte, ist this und ein Beispiel zu unverschlüsselten JWE-Tokens finden Sie am Ende von this page.
Hinweis: Ich habe diese Bibliothek nicht getestet, daher werde ich darüber hinaus nicht sehr nützlich sein, aber es scheint ziemlich geradlinig zu sein.

+0

Ja, aber das ist JWT mit JWE verschlüsselt und hätte daher 5 Teile wie splitToken [0], [1], [2], [3], [4]. –

+0

@HasebAnsari Ich habe meine Antwort für JWE aktualisiert. Viel Glück! – bidluo

2

Die Behauptung, die Sie mit uns geteilt haben, ist eine JWE, die in its compact representation serialisiert wird. Es hat 5 Teile getrennt durch einen Punkt (.) die sind:

  • Teil 1: der Header (eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkExMjhHQ00ifQ)
  • Teil 2: Der verschlüsselte Schlüssel - auf dem Algorithmus abhängig, kann es ein leerer String sein - (K52jFwAQJH-DxMhtaq7sg5tMuot_mT5dm1DR_01wj6ZUQQhJFO02vPI44W5nDjC5C_v4pW1UiJa3cwb5y2Rd9kSvb0ZxAqGX9c4Z4zouRU57729ML3V05UArUhck9ZvssfkDW1VclingL8LfagRUs2z95UkwhiZyaKpmrgqpKX8azQFGNLBvEjXnxxoDFZIYwHOno290HOpig3aUsDxhsioweiXbeLXxLeRsivaLwUWRUZfHRC_HGAo8KSF4gQZmeJtRgai5mz6qgbVkg7jPQyZFtM5_ul0UKHE2y0AtWm8IzDE_rbAV14OCRZJ6n38X5urVFFE5sdphdGsNlA)
  • Part 3: der Initialisierungsvektor - IV auf dem Algorithmus abhängig, kann es ein leerer String sein - (gjI_RIFWZXJwaO9R)
  • Part 4: das Chiffrat (oaE5a-z0N1MW9FBkhKeKeFa5e7hxVXOuANZsNmBYYT8G_xlXkMD0nz4fIaGtuWd3t9Xp-kufvvfD-xOnAs2SBX_Y1kYGPto4mibBjIrXQEjDsKyKwndxzrutN9csmFwqWhx1sLHMpJkgsnfLTi9yWBPKH5Krx23IhoDGoSfqOquuhxn0y0WkuqH1R3z-fluUs6sxx9qx6NFVS1NRQ-LVn9sWT5yx8m9AQ_ng8MBWz2BfBTV0tjliV74ogNDikNXTAkD9rsWFV0IX4IpA)
  • Teil 5: die zusätzlichen Authentifizierungsdaten - AAD - (sOLijuVySaKI-FYUaBywpg)

Der Header gibt zumindest die

In Ihrem Fall die alg ist RSA-OAEP und die enc ist A128GCM. Gemäß diesem Algorithmus sollten Sie einen privaten RSA-Schlüssel haben, um den CEK zu entschlüsseln und ihn dann verwenden, um den Chiffretext zu entschlüsseln.

https://jwt.io in der angenommenen Antwort erwähnt wird nicht nützlich sein, da es JWE nicht unterstützt, sondern JWS. Das Ergebnis, das mit einer JWE-Eingabe angezeigt wird, gibt Ihnen nicht die entschlüsselte Nutzlast. Die Ressource https://connect2id.com/products/nimbus-jose-jwt hilft Ihnen jedoch, da die für Ihr Token verwendeten Algorithmen scheinbar unterstützt werden.

+0

Schön erklärt ..... Ich fand diese Bibliothek von connect2id Nimbus ..... jetzt das Problem ist, ich habe 512 Bits Schlüssel für A256GCM ...... uns dies möglich in jedem Fall. –

+0

Um den CEK zu erhalten, müssen Sie ihn zuerst dekodieren (Base64UrlSafe => binary string) und dann mit dem RSA-OAEP-Algorithmus und dem decodierten IV entschlüsseln. Normalerweise sollte der entschlüsselte CEK mit dem A256GCM-Algorithmus eine 256-Bit-Zeichenfolge sein. Wir können diskutieren [privat, wenn nötig] (https://gitter.im/Spomky). –

+0

ja sicher können wir es in privat diskutieren –

Verwandte Themen