Compressed archive file

application/octet-stream

Safe

Magic Bytes

Offset: 10
23 20 54 68 69 73 20 69 73 20 61 20 73 68 65 6C 6C 20 61 72 63 68 69 76 65

LHA is a legacy compressed archive format originally developed by Haruyasu Yoshizaki for efficient file storage and transfer on MS-DOS and Amiga systems. It is primarily used to bundle multiple files and directories into a single compressed entity to save disk space. While largely replaced by the ZIP format in modern computing, LHA remains relevant for retrocomputing enthusiasts and for extracting historical data from older software repositories.

Extension

.lha

MIME Type

application/octet-stream

Byte Offset

10

Risk Level

Safe

Validation Code

How to validate .lha files in Python

Python
def is_lha(file_path: str) -> bool:
    """
    Check if file is a valid LHA by magic bytes.
    Signature offset: 10 bytes
    """
    signature = bytes([0x23, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x73, 0x68, 0x65, 0x6C, 0x6C, 0x20, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65])
    with open(file_path, "rb") as f:
        f.seek(10)
        return f.read(25) == signature

How to validate .lha files in Node.js

Node.js
function isLHA(buffer: Buffer): boolean {
  // Signature offset: 10 bytes
  const signature = Buffer.from([0x23, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x73, 0x68, 0x65, 0x6C, 0x6C, 0x20, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65]);
  if (buffer.length < 35) return false;
  return buffer.subarray(10, 35).equals(signature);
}
Go
func IsLHA(data []byte) bool {
    // Signature offset: 10 bytes
    signature := []byte{0x23, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x73, 0x68, 0x65, 0x6C, 0x6C, 0x20, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65}
    if len(data) < 35 {
        return false
    }
    return bytes.Equal(data[10:35], signature)
}

API Endpoint

GET /api/v1/lha
curl https://filesignature.org/api/v1/lha

Related Formats