Binární kódování textu - Binary-to-text encoding
![]() | Tento článek má několik problémů. Prosím pomozte vylepši to nebo diskutovat o těchto problémech na internetu diskusní stránka. (Zjistěte, jak a kdy tyto zprávy ze šablony odebrat) (Zjistěte, jak a kdy odstranit tuto zprávu šablony)
|
A kódování binárního textu je kódování z data v prostý text. Přesněji řečeno, jedná se o kódování binárních dat v posloupnosti tisknutelné znaky. Tato kódování jsou nezbytná pro přenos dat, když kanál neumožňuje binární data (např e-mailem nebo NNTP ) nebo není 8bitové čisté. PGP dokumentace (RFC 4880 ) používá výraz „Brnění ASCII"pro binární kódování textu, když se na něj odkazuje Base64.
Popis
The ASCII standard kódování textu používá 128 jedinečných hodnot (0–127) k reprezentaci abecedních, číselných a interpunkčních znaků běžně používaných v Angličtina plus výběr z kontrolní kódy které nepředstavují tisknutelné znaky. Například velké písmeno A je ASCII znak 65, číslice 2 je ASCII 50, znak } je ASCII 125 a metaznak návrat vozíku je ASCII 13. Systémy založené na ASCII používají k digitální reprezentaci těchto hodnot sedm bitů.
Naproti tomu většina počítačů ukládá data do paměti uspořádané do osmi bitů bajtů. Soubory, které obsahují strojově spustitelný kód a netextová data, obvykle obsahují všech 256 možných osmibitových bajtových hodnot. Mnoho počítačových programů se spoléhalo na tento rozdíl mezi sedmibitovým text a osmibitové binární data a nebude správně fungovat, pokud se v datech, u nichž se očekávalo, že budou obsahovat pouze text ASCII, objevily znaky jiné než ASCII. Například pokud není zachována hodnota osmého bitu, může program interpretovat hodnotu bajtu nad 127 jako příznak, který jí říká, že má provádět nějakou funkci.
Často je však žádoucí, aby bylo možné posílat netextová data prostřednictvím textových systémů, například když je možné k e-mailové zprávě připojit obrazový soubor. K dosažení tohoto cíle jsou data nějakým způsobem kódována, takže osmibitová data jsou kódována do sedmibitových znaků ASCII (obvykle se používají pouze alfanumerické a interpunkční znaky - ASCII tisknutelné znaky ). Po bezpečném příjezdu na místo určení je poté dekódován zpět do své osmibitové podoby. Tento proces se označuje jako binární kódování textu. Mnoho programů provádí tuto konverzi, aby umožňovalo přenos dat, například PGP a GNU Privacy Guard (GPG).
Kódování prostého textu
Metody kódování binárního textu se také používají jako mechanismus kódování prostý text. Například:
- Některé systémy mají omezenější znakovou sadu, kterou zvládnou; nejenže nejsou 8bitové čisté, někteří dokonce nemohou zpracovat všechny tisknutelné znaky ASCII.
- Jiné systémy mají omezení počtu znaků, které se mezi nimi mohou objevit konce řádků, například limit „1 000 znaků na řádek“ SMTP software, jak povoluje RFC 2821.
- Stále další přidávají záhlaví nebo přívěsy k textu.
- Několik špatně pokládaných, ale stále používaných protokolů vnitropásmová signalizace, což způsobuje zmatek, pokud se ve zprávě objeví konkrétní vzory. Nejznámější je řetězec „Od“ (včetně koncové mezery) na začátku řádku používaného k oddělení poštovních zpráv v mbox formát souboru.
Pomocí kódování binárního textu na zprávy, které jsou již prostým textem, a poté na druhém konci dekódování, je možné, aby se tyto systémy ukázaly jako zcela průhledný Toto se někdy označuje jako „pancéřování ASCII“. Například součást ViewState z ASP.NET používá base64 kódování pro bezpečný přenos textu přes HTTP POST, aby nedocházelo srážka oddělovače.
Standardy kódování
Níže uvedená tabulka porovnává nejpoužívanější formy kódování binárního textu. Uvedená účinnost je poměr mezi počtem bitů na vstupu a počtem bitů v kódovaném výstupu.
Kódování | Datový typ | Účinnost | Implementace programovacího jazyka | Komentáře |
---|---|---|---|---|
Ascii85 | Libovolný | 80% | awk, C, C (2), C#, F#, Jít, Jáva Perl, Krajta, Python (2) | Existuje několik variant tohoto kódování, Base85, Btoa atd. |
Base32 | Libovolný | 62.5% | ANSI C., Jáva, Krajta | |
Base36 | Celé číslo | ~64% | bash, C, C ++, C#, Jáva, Perl, PHP, Krajta, Visual Basic, Rychlý, mnoho dalších | Používá Arabské číslice 0-9 a Latinská písmena A – Z ( Základní latinka ISO ). Běžně používá Přesměrování URL systémy jako TinyURL nebo SnipURL / Snipr jako kompaktní alfanumerické identifikátory. |
Base58 | Celé číslo | ~73% | C ++, Krajta | Podobně jako Base64, ale upravený tak, aby nedocházelo k nealfanumerickým znakům (+ a /) a písmenům, která by při tisku mohla vypadat nejednoznačně (0 - nula, I - velké i, O - velké o a l - malá písmena L). Satoshi Nakamoto při vytváření vynalezl schéma kódování base58 bitcoin.[1] Některé systémy pro zasílání zpráv a sociální média konec řádku na nealfanumerických řetězcích. Tomu se zabrání nepoužíváním URI vyhrazené znaky například +. Pro segwit byl nahrazen Bech32, viz níže.![]() Base58 v původním zdrojovém kódu bitcoinu |
Bech32 | 1 bit (mainnet nebo testnet) plus 3 až 40 bajtů | není jednoduché procento, protože má 6 bajtů chyba opravující kód | C, C ++, JavaScript, Go, Python, Haskell, Ruby, Rust | Specifikace. Používá se v bitcoinech a Lightning Network.[2] |
Base62 | Podobně jako Base64, ale obsahuje pouze alfanumerické znaky. | |||
Base64 | Libovolný | 75% | awk, C, C (2), Krajta, mnoho dalších | |
Base85 (RFC 1924 ) | Libovolný | 80% | C, Krajta Python (2) | Revidovaná verze Ascii85. |
BinHex | Libovolný | 75% | Perl, C, C (2) | MacOS Classic |
Desetinný | Celé číslo | ~42% | Většina jazyků | Obvykle výchozí reprezentace pro vstup / výstup z / do lidí. |
Hexadecimální (Base16) | Libovolný | 50% | Většina jazyků | Existuje velká písmena a malá písmena varianty |
Intel HEX | Libovolný | ~<50% | C knihovna, C ++ | Obvykle se používá k programování EPROM, NOR-Flash paměťové čipy |
MIM | Libovolný | Vidět Citováno pro tisk a Base64 | Vidět Citováno pro tisk a Base64 | Kódovací kontejner pro formátování jako e-mail |
Formát souboru technologie MOS | Libovolný | Obvykle se používá k programování EPROM, NOR-Flash paměťové čipy. | ||
Procento kódování | Text (URI ), Libovolné (RFC1738 ) | ~40%[A] (33–70%[b]) | C, Krajta, pravděpodobně mnoho dalších | |
Citováno pro tisk | Text | ~33–100%[C] | Pravděpodobně mnoho | Zachovává zalomení řádku; ořízne řádky na 76 znaků |
S-záznam (Motorola hex) | Libovolný | 49.6% | C knihovna, C ++ | Obvykle se používá k programování EPROM, NOR-Flash paměťové čipy. 49,6% předpokládá 255 binárních bajtů na záznam. |
Tektronix hex | Libovolný | Obvykle se používá k programování EPROM, NOR-Flash paměťové čipy. | ||
Uuencoding | Libovolný | ~60% (až 70% ) | Perl, C, Jáva, pravděpodobně mnoho dalších | Většinou nahrazeno MIME a yEnc |
Xxencoding | Libovolný | ~ 75% (podobně jako Uuencoding) | C | Navrženo (a příležitostně používáno) jako náhrada za Uuencoding, aby se předešlo problémům s překladem znakových sad mezi systémy ASCII a EBCDIC, které by mohly poškodit Uuencoded data |
yEnc | Svévolné, většinou netextové | ~98% | C | Zahrnuje kontrolní součet CRC |
RFC 1751 (S / KLÍČ ) | Libovolný | 33% | C,[3] Krajta, ... | "Konvence pro Člověk čitelný 128bitové klíče ". Řada malých anglických slov je pro lidi snadnější číst, pamatovat si a psát než v desetinných nebo jiných binárních systémech kódování textu.[4]Každé 64bitové číslo je mapováno na šest krátkých slov, každý s jedním až čtyřmi znaky, z veřejného slovníku o 2048 slovech.[3] |
95 isprint kódy 32 až 126 jsou známé jako ASCII tisknutelné znaky.
Některé starší a dnes neobvyklé formáty zahrnují BOO, BTOA a kódování USR.
Většina z těchto kódování generuje text obsahující pouze podmnožinu všech ASCII tisknutelné znaky: například base64 kódování generuje text, který obsahuje pouze velká a malá písmena, (A – Z, a – z), číslice (0–9) a symboly „+“, „/“ a „=“.
Některá z těchto kódování (citace pro tisk a procentuální kódování) jsou založena na sadě povolených znaků a jednom úniková postava. Povolené znaky zůstávají nezměněny, zatímco všechny ostatní znaky jsou převedeny na řetězec začínající znakem escape. Tento druh převodu umožňuje, aby byl výsledný text téměř čitelný, protože písmena a číslice jsou součástí povolených znaků, a proto jsou ponechány tak, jak jsou v kódovaném textu. Tato kódování vytvářejí nejkratší prostý výstup ASCII pro vstup, který je většinou tisknutelné ASCII.
Některá další kódování (base64, uuencoding ) jsou založeny na mapování všech možných sekvencí šesti bity na různé tisknutelné znaky. Protože jich je více než 26 = 64 tisknutelných znaků, toto je možné. Daná posloupnost bajtů je přeložena zobrazením jako proud bitů, rozbitím tohoto proudu na kousky šesti bitů a vygenerováním posloupnosti odpovídajících znaků. Různá kódování se liší v mapování mezi sekvencemi bitů a znaků a ve způsobu formátování výsledného textu.
Některá kódování (původní verze BinHex a doporučené kódování pro CipherSaber ) použijte čtyři bity místo šesti, mapujte všechny možné sekvence 4 bitů na 16 standardů hexadecimální číslic. Použití 4 bitů na kódovaný znak vede k 50% delšímu výstupu než base64, ale zjednodušuje kódování a dekódování - rozšíření každého bajtu ve zdroji nezávisle na dva kódované bajty je jednodušší než rozšíření 3 zdrojových bajtů base64 na 4 kódované bajty.
Mimo PETSCII Prvních 192 kódů, 164, mají při citaci viditelná zobrazení: 5 (bílá), 17–20 a 28–31 (barvy a ovládací prvky kurzoru), 32–90 (ekvivalent ASCII), 91–127 (grafika), 129 (oranžová ), 133–140 (funkční klávesy), 144–159 (ovládání barev a kurzoru) a 160–192 (grafika).[5] To teoreticky umožňuje kódování, například base128, mezi zařízeními mluvícími PETSCII.
Poznámky
Reference
- ^ „Schéma kódování Base58“. Pracovní skupina pro internetové inženýrství. 27. listopadu 2019. Archivovány od originál 12. srpna 2020. Citováno 12. srpna 2020.
Děkujeme Satoshi Nakamotovi za vynalezení formátu kódování Base58
- ^ Rusty Russell; et al. (2020-10-15). "Kódování plateb v Lightning RFC repo “.
- ^ A b RFC 1760 "Systém jednorázového hesla S / KEY".
- ^ RFC 1751 „Konvence pro 128bitové klíče čitelné člověkem“
- ^ http://sta.c64.org/cbm64pet.html et al