JSON 안의 Base64 필드를 디코딩하는 방법
- 입력 · JSON에 JSON을 붙여넣거나
.json이나.har파일을 놓으세요. - 표에 일치 항목마다 경로, 추정 형식, 신뢰도, 디코딩 결과 미리보기가 표시되고 디코딩 결과 복사와 다운로드 버튼이 있습니다.
- 출력 창에는 텍스트, JSON, JWT 값을 제자리에서 디코딩한 전체 문서가 담겨 있어 바로 읽거나 diff로 비교할 수 있습니다.
- 짧은 문자열을 건너뛰려면 최소 길이(기본값 8)를 조정하고, 첫 단계에서 멈추려면 중첩 JSON 파싱을 해제하고, 짧은 바이너리 키를 찾는다면 신뢰도 낮은 일치 항목 표시를 선택하세요.
JSON을 Base64로 탭은 반대 작업을 합니다. JSON을 검증하고 입력한 그대로, 압축(minify), 보기 좋게 정렬한 형태 중 하나로 인코딩하며 URL-safe, 패딩 없음, 줄 바꿈 옵션을 지원합니다.
예시: 인코딩된 필드 3개가 있는 API 응답
{
"event": { "body": "eyJvcmRlcklkIjo0MiwicXR5IjoyfQ==", "isBase64Encoded": true },
"file": { "name": "README.md", "encoding": "base64",
"content": "IyBEZW1vCgpIZWxsbyBmcm9tIHRoZSBSRUFETUUuCg==" },
"prefs": "eyJ0aGVtZSI6ImRhcmsifQ==",
"sha": "3b18e512dba79e4c8300dd08aeb37f8e728b8dad"
}
| 경로 | 추정 형식 | 디코딩 결과 |
|---|---|---|
$.event.body | JSON | {"orderId":42,"qty":2} |
$.file.content | 텍스트 | # Demo / Hello from the README. |
$.prefs | JSON | {"theme":"dark"} |
$.sha는 목록에 없습니다. 40자 hex 문자열은 알파벳만 보면 올바른 Base64지만 Git 해시이며, 스캐너는 긴 hex 문자열을 일부러 제외합니다. 표의 모든 eyJ 접두사는 {"의 Base64로, 인코딩된 JSON임을 빠르게 알려 주는 표시입니다.
JSON 속에 Base64가 숨어 있는 곳
- AWS API Gateway와 Lambda 이벤트는 바이너리나 압축된 본문을
"isBase64Encoded": true와 함께body에 담습니다. - GitHub contents API는 파일을
"encoding": "base64"와 함께content에 담아 돌려주며,\n으로 줄이 나뉘어 있습니다. 여기서는 줄 바꿈을 무시합니다. - Gmail API의 메시지 파트는
body.data에 URL-safe Base64를 씁니다. URL-safe 입력(-와_)은 자동으로 감지됩니다. access_token이나id_token필드의 JWT는 헤더와 페이로드가 디코딩됩니다. 서명 확인은 JWT 디코더를 사용하세요.avatar나logo필드의data:image/png;base64,…같은 data URI는 MIME 형식과 함께 인식됩니다.- JSON 형태의 Kubernetes Secret. Kubernetes Secret 디코더에는 Secret 전용 기능이 더 있습니다.
Python으로 하기
UTF-8 텍스트로 디코딩되는 문자열을 보고하는 최소한의 탐색기입니다.
import base64, binascii, json, sys
def walk(node, path="$"):
if isinstance(node, dict):
for k, v in node.items():
yield from walk(v, f"{path}.{k}")
elif isinstance(node, list):
for i, v in enumerate(node):
yield from walk(v, f"{path}[{i}]")
elif isinstance(node, str) and len(node) >= 8:
try:
text = base64.b64decode(node, validate=True).decode("utf-8")
yield path, text
except (binascii.Error, UnicodeDecodeError):
pass
for path, text in walk(json.load(open(sys.argv[1]))):
print(path, "=>", text[:60])
이 코드는 URL-safe 값, 패딩 없는 값, 이미지 같은 바이너리 페이로드를 놓치는데, 실제 스캐너의 작업 대부분이 바로 그 부분입니다. 디코딩 세부 사항은 Python의 Base64를, 알파벳 차이는 Base64와 Base64URL을 참고하세요.
한계
- 감지는 휴리스틱입니다. 8자 미만의 값과 무작위처럼 보이는 바이너리 키는 놓치거나 불확실로 표시될 수 있습니다. 보려면 최소 길이를 낮추고 신뢰도 낮은 일치 항목을 켜세요.
- 스캔은 문자열 200,000개에서 멈추고 최대 1,000행까지 표시합니다. 큰 HAR 파일도 탭이 멈추지 않고 처리할 수 있는 수준입니다.
- 잘못된 JSON은 행과 열과 함께 보고됩니다. JSON으로 디코딩되는 Base64 문자열 하나라면 Base64를 JSON으로를 사용하세요.
자주 묻는 질문
도구는 Base64와 일반 문자열을 어떻게 구분하나요?
후보마다 디코딩해 결과를 살펴봅니다. 읽을 수 있는 UTF-8, 올바른 JSON, 알려진 파일 시그니처는 신뢰도 높음으로 봅니다. hex 해시, 숫자만 있는 문자열, 일반 단어는 제외하고, 바이너리 결과는 길이와 패딩에 따라 가능성 높음이나 불확실로 표시합니다.
HAR 파일 안의 Base64 필드도 디코딩할 수 있나요?
네. 브라우저 네트워크 패널에서 내보낸 .har 파일을 놓으세요. "encoding": "base64"로 저장된 응답 본문이 디코딩된 내용과 함께 표에 나타나고, 요청과 응답 JSON 안의 Base64도 함께 표시됩니다.
이미지 같은 바이너리 값은 어떻게 되나요?
감지된 파일 형식과 다운로드 버튼과 함께 나열되며, 출력 창에서는 Base64 그대로 남습니다. 텍스트, JSON, JWT 값만 제자리에서 바뀝니다.