사전

파일의 Raw Header란 무엇입니까?

원시 헤더는 파일의 첫 바이트들을 16진수 숫자로 보여줍니다. 이 바이트들은 실제 파일 형식을 나타내며, 그중 상당수는 텍스트로 읽을 수 있습니다.

raw-header

원시 헤더는 파일의 첫 부분으로, 이름이 붙은 메타데이터 필드가 아니라 바이트 단위로 표시됩니다. 많은 파일 형식은 시그니처 또는 매직 넘버라고 부르는 고정된 바이트 패턴으로 시작합니다. 프로그램은 이 패턴을 읽어 파일의 종류를 파악합니다.

메타데이터 보고서에서 원시 헤더 필드는 이 바이트들을 16진수 숫자로 표시합니다. 89 또는 FF와 같은 두 글자 쌍은 각각 1바이트를 나타냅니다.

이메일에도 맨 위에 From, To, Subject 같은 필드가 있는 헤더 구역이 있습니다. 이 글에서는 파일의 헤더를 다룹니다.

값이 어떻게 보이는지

16진수(헥사, 진수 16)는 각 바이트를 숫자 0부터 9와 문자 A부터 F까지 2개의 문자로 표기합니다. 따라서 한 바이트는 00부터 FF까지의 값을 가질 수 있습니다.

ASCII 문자 코드에서 21부터 7E까지의 값은 문자, 숫자, 문장 부호를 나타내며, 20는 공백입니다. 20보다 작은 값은 제어 코드이고, 00는 NUL이라고 하는 모든 비트가 0인 문자입니다.

원시 헤더를 텍스트로 읽는 방법

원시 헤더를 텍스트로 바꾸려면 각 바이트를 ASCII 표에서 찾아보세요. 20부터 7E까지의 바이트만이 눈에 보이는 ASCII 문자 또는 공백을 나타냅니다. 다른 바이트는 그렇지 않아서, 보통 헤더의 일부만 읽을 수 있습니다.

  • 25 50 44 46 2D는 퍼센트 기호, 문자 PDF, 그리고 하이픈으로 읽힙니다.
  • 89 50 4E 47의 2~4바이트에는 PNG라는 문자가 들어 있습니다.

일반적인 값

일반적인 형식은 다음과 같은 시그니처로 시작합니다.

  • PNG 이미지: 89 50 4E 47 0D 0A 1A 0A
  • JPEG 이미지: FF D8 FF(이때 FF D8가 이미지의 시작을 표시함)
  • GIF 이미지: 47 49 46 38, 그 다음 39 61 또는 37 61 (GIF89a 또는 GIF87a)
  • PDF 문서: 25 50 44 46 2D, 그 다음 버전(예: 1.7)
  • TIFF 이미지, 리틀 엔디언: 49 49 2A 00 (II, 그 다음 숫자 42)
  • TIFF 이미지, 빅 엔디언: 4D 4D 00 2A (MM, 그 다음 숫자 42)
  • ZIP 압축 파일, DOCX와 같은 ZIP 기반 Office 파일: 50 4B 03 04 (PK)
  • ID3v2 태그가 있는 MP3 오디오: 49 44 33 (ID3)
  • WAV 오디오: 52 49 46 46 (RIFF), 바이트 값이 달라지는 4바이트, 그 다음 57 41 56 45 (WAVE)
  • MP4 비디오: 4바이트 크기 값 뒤에 66 74 79 70 (ftyp)

TIFF 파일에서는 처음 2바이트가 파일 안의 숫자에 사용할 바이트 순서(엔디언)를 설정합니다. PDF 파일에서는 시그니처 뒤에 오는 문자들이 PDF 버전을 나타내지만, 파일 뒤쪽의 항목이 이를 덮어쓸 수 있습니다.

어떤 파일에 포함되어 있는지

모든 파일에는 원시 헤더가 있지만, 모든 형식에 시그니처가 있는 것은 아닙니다. 일반 텍스트 파일은 바로 텍스트로 시작합니다. 프로그램은 처음 바이트들이 텍스트 문자만 포함하고 있다는 점으로 이러한 파일을 인식합니다.

왜 중요한지

파일 이름 확장자는 이름의 일부일 뿐이며, 누구나 변경할 수 있습니다. 확장자가 잘못되어 있어도 헤더는 실제 파일 형식과 MIME 형식을 드러낼 수 있습니다.

웹 서버가 MIME 형식을 보내지 않거나, 브라우저가 받은 형식이 잘못되었다고 판단할 수 있습니다. 그러면 브라우저는 처음 바이트들을 알려진 패턴 표와 비교할 수 있습니다. 유닉스 file 명령은 파일 시작 부분 근처에서 매직 넘버를 찾습니다.

헤더는 문제를 찾는 데도 도움이 됩니다. photo.png라는 이름의 파일이 89 50 4E 47로 시작하지 않으면 PNG 형식을 따르지 않는 것입니다. 파일의 시작 부분이 손상되었거나, 확장자가 잘못된 다른 형식의 파일일 수 있습니다.

00 바이트만으로 이루어진 헤더는 어떤 일반적인 시그니처와도 일치하지 않습니다. 그러나 MP4 파일은 처음 4바이트의 작은 크기 값이 0으로 시작하기 때문에 00으로 시작할 수 있습니다. 어떤 것과도 일치하지 않고 바이트들이 텍스트도 아닐 때, 브라우저는 파일을 application/octet-stream으로 처리합니다.

메타 키