ASCII, Unicode og tekstrepræsentation
Forstå, hvordan tekst bliver til bytes, og hvorfor tegnkodning er vigtig i kryptografiske sammenhænge.
ASCII, Unicode og tekstrepræsentation er en gratis Cryptology Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Cryptology Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Cryptology Academy-kurset indeholder 4 lektioner i alt.
ASCII som 7-bit-kodning
ASCII (American Standard Code for Information Interchange), der blev standardiseret i 1963, koder 128 tegn med 7 bit (værdier fra 0 til 127). Det omfatter det engelske alfabet (store og små bogstaver), cifre, tegnsætningstegn og kontroltegn.
ASCII blev udviklet til engelsk og amerikansk telekommunikationsudstyr. Det fungerede godt til det tilsigtede formål, men var grundlæggende utilstrækkeligt til alle andre sprog end engelsk.
Kontroltegn i ASCII
De første 32 ASCII-tegn (0-31) samt DEL (127) er kontroltegn. De blev oprindeligt udviklet til at styre Teletype-maskiner: LF (linjeskift, 10), CR (vognretur, 13), BEL (klokke, 7), TAB (9), ESC (27).
I kryptografiske sammenhænge kan kontroltegn give problemer. En nulbyte (0x00) afslutter C-strenge for tidligt, og et DEL- eller ESC-tegn kan blive fortolket af terminalemulatorer.
Udvidet ASCII og problemerne med det
Forskellige lande oprettede deres egne udvidelser af ASCII ved at bruge den 8. bit (værdier fra 128 til 255), hvilket skabte hundredvis af inkompatible kodninger: ISO-8859-1 (Latin-1) til vesteuropæiske sprog, KOI-8R til russisk og Big5 til kinesisk.
Et dokument, der er gemt med én kodning, ser ud som volapyk, når det åbnes med en anden kodning. Manglen på en universel standard gjorde international softwareudvikling til en betydelig udfordring i 1980'erne og 1990'erne.
Unicode som universelt tegnsæt
Unicode blev oprettet for at levere ét universelt tegnsæt, der dækker alle menneskelige skriftsystemer. Det definerer i øjeblikket over 149.000 tegn fordelt på 161 skriftsystemer, herunder historiske skriftsystemer og symboler.
Unicode adskiller tegnets identitet (et kodepunkt, f.eks. U+0041 for "A") fra kodningen (hvordan dette kodepunkt gemmes i bytes). Denne adskillelse gør det muligt for flere kodningsformater at repræsentere de samme tegn.
UTF-8-kodning med variabel længde
UTF-8 koder Unicode-kodepunkter ved hjælp af 1 til 4 bytes. ASCII-tegn (U+0000 til U+007F) bruger præcis 1 byte, som er identisk med deres ASCII-værdier, så UTF-8 er bagudkompatibel med ASCII.
Tegn fra U+0080 til U+07FF bruger 2 bytes. U+0800 til U+FFFF bruger 3 bytes (hvilket dækker de fleste almindelige skriftsystemer, herunder kinesisk, japansk og koreansk). U+10000 og opefter bruger 4 bytes.
UTF-16 og UTF-32
UTF-16 bruger 2 bytes til de mest almindelige tegn (det grundlæggende flersprogede plan, U+0000 til U+FFFF) og 4 bytes (surrogatpar) til tegn over U+FFFF. Det bruges internt af Windows og Java.
UTF-32 bruger præcis 4 bytes pr. kodepunkt, hvilket gør formatet fast i bredden og nemt at indeksere efter tegnposition, men spildagtigt for tekst, der hovedsageligt består af ASCII. Det bruges i nogle interne repræsentationer for at give hurtig tilfældig adgang.
Markering af byterækkefølge (BOM)
Markeringen af byterækkefølge (BOM) er Unicode-tegnet U+FEFF, som placeres i begyndelsen af en fil for at angive byterækkefølge og kodning. I UTF-16 skelner den mellem big-endian (FE FF) og little-endian (FF FE).
I UTF-8 er BOM'en unødvendig, eftersom UTF-8 ikke har problemer med byterækkefølge, men noget Windows-software tilføjer den alligevel. Det giver problemer i kryptografiske applikationer, hvor BOM'en behandles som data i stedet for som en markør.
Hvorfor kodning er vigtig i kryptografi
Kryptografiske hashfunktioner og MAC'er arbejder på bytesekvenser, ikke abstrakte tegn. Den samme streng "café" kodes forskelligt i UTF-8 (4 bytes: 63 61 66 C3 A9) og Latin-1 (4 bytes: 63 61 66 E9).
Hvis to systemer hasher den samme streng, men bruger forskellige kodninger, producerer de forskellige hashværdier, og autentificeringen mislykkes. Kryptografiske protokoller skal angive kodningen eksplicit for at sikre interoperabilitet.
Emoji i UTF-8
Emoji er Unicode-tegn i det supplerende flersprogede plan. Emoji-tegnet "Grinning Face" (U+1F600) kodes til 4 bytes i UTF-8: F0 9F 98 80.
I sikkerhedssammenhænge er emoji og Unicode-tegn i fuld bredde blevet brugt i homografangreb, hvor en URL som "xn--pple-43d.com" (der ligner "apple.com") lokker brugere til at besøge et ondsindet websted.
Unicode-normalisering og kryptografi
Nogle tegn kan repræsenteres på flere måder i Unicode. "e med akut accent" kan være U+00E9 (forudkomponeret) eller U+0065 U+0301 (e efterfulgt af en kombinerende accent, dekomponeret). De ser identiske ud, men har forskellige byterepresentationer.
Kryptografiske systemer, der ikke normaliserer Unicode før hashing, kan producere forskellige hashværdier for visuelt identiske strenge. NFKC-normalisering anbefales ofte, før der udføres kryptografiske operationer på tekst.
Valg af den rigtige kodning til kryptografi
Når du implementerer kryptografiske systemer, er valget af kodning en kritisk beslutning, som skal dokumenteres. Adgangskoder bør kodes som UTF-8 før hashing. Protokolfelter bør angive kodningen i deres specifikationsdokumenter.
Interoperabilitetsfejl på grund af uoverensstemmelser i kodningen er en almindelig kilde til fejl i kryptografiske systemer. To implementeringer af den samme protokol kan give forskellige autentificeringsresultater, hvis de koder strenge forskelligt.
Quiz om UTF-8-kodning
Test din forståelse af UTF-8-kodning.
Vigtigste pointer: Tekstkodning
ASCII dækker 128 tegn med 7 bit. Unicode leverer et universelt kodepunktsområde til alle menneskelige skriftsystemer. UTF-8 koder Unicode med 1-4 bytes, hvor ASCII udgør et undersæt på 1 byte.
I kryptografi er kodning vigtig, fordi hashfunktioner arbejder på bytes. Den samme tekst i forskellige kodninger giver forskellige hashværdier. Unicode-normalisering er afgørende før kryptografiske operationer på tekst.
Lær Cryptology Academy med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 67
- Lektioner
- 261
Ofte stillede spørgsmål
Er lektionen “ASCII, Unicode og tekstrepræsentation” gratis?
Ja — hele teksten til “ASCII, Unicode og tekstrepræsentation” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Cryptology Academy-kurset, skal du opgradere til CoddyKit PRO. Cryptology Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “ASCII, Unicode og tekstrepræsentation”?
Forstå, hvordan tekst bliver til bytes, og hvorfor tegnkodning er vigtig i kryptografiske sammenhænge. Du øver dig i Cryptology Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Cryptology Academy?
Der kræves ingen tidligere erfaring. Cryptology Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “ASCII, Unicode og tekstrepræsentation”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Cryptology Academy-lektion?
Ja. Alle Cryptology Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Base64-kodning: Sådan fungerer det
- ASCII, Unicode og tekstrepræsentation
- Heksadecimal i kryptografisk output
- Kodning kontra kryptering kontra hashing