2017-11-03 2 views
1

Notepad++에서 JWT를 디코딩하는 데 문제가 있습니다. 나는 함께 Plugins -> MIME Tools -> Base64 Decode를 사용하려고하면 :JWT Base64 디코드가 메모장에서 실패했습니다. ++

eyJleHAiOjE0NDIzNjAwMzQsIm5iZiI6MTQ0MjM1NjQzNCwidmVyIjoiMS4wIiwiaXNzIjoiaHR0cHM6Ly9sb2dpbi5taWNyb3NvZnRvbmxpbmUuY29tLzc3NTUyN2ZmLTlhMzctNDMwNy04YjNkLWNjMzExZjU4ZDkyNS92Mi4wLyIsImFjciI6ImIyY18xX3NpZ25faW5fc3RvY2siLCJzdWIiOiJOb3Qgc3VwcG9ydGVkIGN1cnJlbnRseS4gVXNlIG9pZCBjbGFpbS4iLCJhdWQiOiI5MGMwZmU2My1iY2YyLTQ0ZDUtOGZiNy1iOGJiYzBiMjlkYzYiLCJpYXQiOjE0NDIzNTY0MzQsImF1dGhfdGltZSI6MTQ0MjM1NjQzNCwiaWRwIjoiZmFjZWJvb2suY29tIn0

내가 얻을 :

디코딩 될 선택된 텍스트 (EOL 제외)의 길이가 유효하지 않습니다. 그것은 4

을 MOD해야하지만 사용 www.base64decode.org 경우 잘 작동 :

{ "특급"1442360034 "을 NBF": 1442356434, "버전": "1.0", "ISS ":"https://login.microsoftonline.com/775527ff-9a37-4307-8b3d-cc311f58d925/v2.0/ ","acr ":"b2c_1_sign_in_stock ","sub ":"현재 지원되지 않음 oid 소유권 주장 사용 ","aud ":"90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6 ","iat ": 1442356434 , "auth_time": 1442356434, "idp": "facebook.com"}

왜 그런가요? 메모장 ++를 잘못 사용하고 있습니까?


사용하는 값은 Azure AD B2C: Token reference입니다.

+1

데이터 끝에있는 '='가 제거되었습니다. 하나 또는 두 개를 더하고 다시 시도하십시오. –

+0

@FlorentMorselli 그게 다야! 대답을 제공해주세요. 나는 그걸로 표시 할 것입니다. – spottedmahn

답변

2

짧은 답변 :

당신이 인코딩 된 문자열의 문자 수를 확인해야 복호 문자열을 만들려면 당신이 얻을 4 문자의 수를 분할하지해야 의미 (4)의 정수배 나머지. 이 특별한 경우에는 443 자입니다. 끝에 =을 추가하면 디코딩 할 수있게됩니다.

긴 대답 :

Base64 인코딩 패딩이라는 것을 사용합니다. 출력의 문자 수는 4의 정수 배가되어야합니다. 실제 출력이 해당 요구 사항을 충족시키지 못하면 인코딩 알고리즘은 추가 패딩 문자를 출력에 추가합니다. 패딩 문자는 일반적으로 =입니다.

Wikipedia에는 몇 가지 예가 있습니다. this 게시물을 볼 수도 있습니다.

"일반"base64url 인코딩과 JWT과 함께 사용되는 base64url 인코딩 간에는 차이가 있습니다. JWT는 패딩 문자를 건너 뜁니다. 그들은 단순히 추가되지 않습니다. 따라서 JWT의 모든 디코딩 알고리즘은이 사실을 고려해야합니다.

일반 base64 디코더는 패딩없이 인코딩 된 문자열을 입력으로 허용하지 않습니다 (패딩이 필요한 경우). 그들은 입력 문자열의 길이를 확인하고 길이가 잘못 길이 % 4 = 0 오류 메시지

Length of selected text (not including EOL) to be decoded is invalid. It should be mod 4. 

에서 것을 볼 수 있는지 확인 어디 대부분의 디코더는 디코딩 알고리즘의 시작 부분에서 주장이 패딩 문자가 없기 때문입니다.

그래서 패드리스 문자열을 처리하는 디코더를 사용하는 것이 좋습니다. Andre는 이미 하나의 사이트를 연결했습니다. Here은 또 하나입니다.

+0

나는 마이크, 고마워! 처음에'='를 추가했는데 오류는 발생하지 않지만 데이터는 가비지입니다. 나는 또한 Chris의 대답을 위해'URL 디코드 (URL Decode) '를 먼저 수행했다. – spottedmahn

+0

@spottedmahn 인코딩 된 문자열을 복사/붙여 넣기하고 '='를 추가하여 444 자로 4로 나눌 수 있습니다. 디코딩 된 내용은 나에게 잘 보이지만 실제 내용은 질문과 약간 다릅니다. . 해독하고 싶은 콘텐츠를 선택해야했습니다. – MikaS

+0

'='를 앞에 붙여서 실패했습니다. 귀하의 응답을 읽은 후, 나는 그것을 첨부하려고 노력하고 그게 효과가! – spottedmahn

1

위의 토큰은 에서 동일하지 않으며 유효하지 않은 것으로 보입니다. 이 질문이 Notepad ++에 관한 것이 아니라면, https://jwt.ms과 같은 사이트를 사용하여 토큰을 디코딩하는 것이 좋습니다. jwt.ms은 토큰을 디코딩 할뿐만 아니라 각 청구항의 의미를 이해하도록 도와줍니다.

+0

"유효하지 않은 것 같습니다"단지 [페이로드 부분입니다] (https://scotch.io/tutorials/the-anatomy-of-a-json-web- 토큰 # toc-breaking-down-a-json-web-token). – spottedmahn

+0

예, https://jwt.ms가 좋습니다! 그러나 그것이하는 것은 다른 도구들에서도 작동해야합니다. – spottedmahn

1

JWT는 URL 안전 알파벳을 사용하는 "base64url"을 사용하여 인코딩됩니다.

은 "base64url"부호화는 예약 된 URL 문자 치환베이스 64 인코딩 (예컨대 -+ 바꾸고 _/ 대체) 및 패딩 문자가 제거된다.

관련 문제