İçeriğe geç
🛠️ToolsShed

Base85 Encoder / Decoder

Base85 (ASCII85) ve RFC 1924 kodlaması kullanarak metni kodlayın ve çözün.

Base85 Hakkında

Base85, 85 yazdırılabilir ASCII karakteri kullanarak ikili verileri kodlar. ASCII85, PDF ve PostScript'te kullanılır. RFC 1924 farklı bir karakter seti kullanır.

Bu araç hakkında

Base85, ham verileri okunabilir ASCII metne dönüştüren bir ikili-metin kodlama sistemidir ve yalnızca metin kanalları aracılığıyla ikili bilgi iletmeye idealdir. Verileri %33 genişleten Base64'ün aksine, Base85 çok daha fazla alan açısından verimlidir ve dosya boyutuna yalnızca %25 kadar ekler—görüntüler veya belge ekleri gibi büyük yüklerle çalışırken önemli bir avantaj.

Bu encoder'ı kullanmak için, basitçe kodlama varyantını seçin (ASCII85, PDF ve PostScript'te kullanılan Adobe standardıdır; RFC 1924 ağ odaklı bir alternatiftir), ardından kodlama veya kod çözme modunu seçin. Metin veya kodlanmış verilerinizi yapıştırın, düğmeye tıklayın ve sonuç, kodlanmış sürümün ne kadar alan kullanacağını gösteren boyut karşılaştırması ile görünür.

Base85, hem verimlilik hem de metin güvenliğinin önemli olduğu özel bağlamlarda parlak bir performans gösterir: gömülü yazı tiplerini depolayan PDF dosyaları, baskı iş akışlarındaki PostScript grafikleri veya ikili verinin kompakt temsilini gerektiren ağ protokolleri. Base64 daha evrensel olarak desteklense de, çıktı boyutunu en aza indirgemek ve taşınabilirliği korumak istediğinizde Base85 standart seçimdir.

Sıkça Sorulan Sorular

Kod Uygulaması

import struct

def encode_ascii85(data: bytes) -> str:
    result = []
    for i in range(0, len(data), 4):
        chunk = data[i:i+4]
        padded = chunk.ljust(4, b'\x00')
        n = struct.unpack('>I', padded)[0]
        if n == 0 and len(chunk) == 4:
            result.append('z')
        else:
            chars = []
            for _ in range(5):
                chars.append(chr(n % 85 + 33))
                n //= 85
            result.extend(reversed(chars[:len(chunk)+1]))
    return '<~' + ''.join(result) + '~>'

def decode_ascii85(s: str) -> bytes:
    s = s.strip()
    if s.startswith('<~') and s.endswith('~>'):
        s = s[2:-2]
    result = bytearray()
    i = 0
    while i < len(s):
        if s[i] == 'z':
            result.extend(b'\x00' * 4); i += 1
        else:
            chunk = s[i:i+5]
            n = sum((ord(c) - 33) * (85 ** (4 - j)) for j, c in enumerate(chunk))
            result.extend(struct.pack('>I', n)[:len(chunk)-1])
            i += 5
    return bytes(result)

text = "Hello, World!"
encoded = encode_ascii85(text.encode())
print("Encoded:", encoded)
print("Decoded:", decode_ascii85(encoded).decode())

Comments & Feedback

Comments are powered by Giscus. Sign in with GitHub to leave a comment.