Cryptology Academy · Lektion

ASCII, Unicode och textrepresentation

Förstå hur text blir byteföljder och varför teckenkodning är viktig i kryptografiska sammanhang.

Lektion 2 av 413 steg

ASCII, Unicode och textrepresentation är en gratis lektion i Cryptology Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Cryptology Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Cryptology Academy innehåller totalt 4 lektioner.

ASCII som 7-bitarskodning

ASCII (American Standard Code for Information Interchange), som standardiserades 1963, kodar 128 tecken med 7 bitar (värdena 0–127). Det omfattar det engelska alfabetet (versaler och gemener), siffror, skiljetecken och kontrolltecken.

ASCII utformades för engelska och amerikansk telekommunikationsutrustning. Det fungerade bra för sitt avsedda ändamål, men var i grunden otillräckligt för alla språk utom engelska.

Kontrolltecken i ASCII

De första 32 ASCII-tecknen (0–31) samt DEL (127) är kontrolltecken. De utformades ursprungligen för att styra Teletype-maskiner: LF (radmatning, 10), CR (vagnretur, 13), BEL (signal, 7), TAB (9) och ESC (27).

I kryptografiska sammanhang kan kontrolltecken orsaka problem. En nullbyte (0x00) avslutar C-strängar i förtid, och ett DEL- eller ESC-tecken kan tolkas av terminalemulatorer.

Utökad ASCII och dess problem

Olika länder skapade egna utökningar av ASCII genom att använda den åttonde biten (värdena 128–255), vilket gav hundratals inkompatibla kodningar: ISO-8859-1 (Latin-1) för västeuropeiska språk, KOI-8R för ryska och Big5 för kinesiska.

Ett dokument som sparats med en kodning ser ut som obegriplig text när det öppnas med en annan kodning. Bristen på en universell standard gjorde internationell programvaruutveckling till en betydande utmaning under hela 1980- och 1990-talen.

Unicode som universell teckenuppsättning

Unicode skapades för att tillhandahålla en enda universell teckenuppsättning som täcker alla mänskliga skriftsystem. Den definierar för närvarande över 149 000 tecken som täcker 161 skriftsystem, inklusive historiska skriftsystem och symboler.

Unicode skiljer teckenidentitet (en kodpunkt, till exempel U+0041 för "A") från kodning (hur kodpunkten lagras i byte). Denna uppdelning gör det möjligt för flera kodningsformat att representera samma tecken.

UTF-8-kodning med variabel längd

UTF-8 kodar Unicode-kodpunkter med 1 till 4 byte. ASCII-tecken (U+0000 till U+007F) använder exakt 1 byte, identisk med deras ASCII-värden, vilket gör UTF-8 bakåtkompatibelt med ASCII.

Tecken från U+0080 till U+07FF använder 2 byte. U+0800 till U+FFFF använder 3 byte (vilket omfattar de flesta vanliga skriftsystem, däribland kinesiska, japanska och koreanska). U+10000 och högre använder 4 byte.

UTF-16 och UTF-32

UTF-16 använder 2 byte för de vanligaste tecknen (Basic Multilingual Plane, U+0000 till U+FFFF) och 4 byte (surrogatpar) för tecken över U+FFFF. Det används internt av Windows och Java.

UTF-32 använder exakt 4 byte per kodpunkt, vilket gör det till en kodning med fast bredd som är enkel att indexera utifrån teckenposition. Däremot är den slösaktig för text som huvudsakligen består av ASCII. Den används i vissa interna representationer för snabb slumpmässig åtkomst.

Byte Order Mark (BOM)

Byte Order Mark (BOM) är Unicode-tecknet U+FEFF som placeras i början av en fil för att ange byteordning och kodning. I UTF-16 skiljer det big-endian (FE FF) från little-endian (FF FE).

I UTF-8 är BOM (EF BB BF) onödigt eftersom UTF-8 inte har problem med byteordning, men viss Windows-programvara lägger ändå till det. Det orsakar problem i kryptografiska tillämpningar där BOM behandlas som data i stället för som en markör.

Varför kodning är viktig i kryptografi

Kryptografiska hashfunktioner och MAC:ar arbetar med bytesekvenser, inte abstrakta tecken. Samma sträng, "café", kodas olika i UTF-8 (4 byte: 63 61 66 C3 A9) och Latin-1 (4 byte: 63 61 66 E9).

Om två system hashar samma sträng men använder olika kodningar får de olika hashvärden, och autentiseringen misslyckas. Kryptografiska protokoll måste ange kodningen uttryckligen för att säkerställa interoperabilitet.

Emoji i UTF-8

Emoji är Unicode-tecken i Supplementary Multilingual Plane. Emoji-symbolen "Grinning Face" (U+1F600) kodas till 4 byte i UTF-8: F0 9F 98 80.

I säkerhetssammanhang har emoji och Unicode-tecken med full bredd använts i homografattacker, där en URL som "xn--pple-43d.com" (som ser ut som "apple.com") lurar användare att besöka en skadlig webbplats.

Unicode-normalisering och kryptografi

Vissa tecken kan representeras i flera Unicode-former. "e med akut accent" kan vara U+00E9 (förkomponerat) eller U+0065 U+0301 (e följt av kombinerande accent, dekomponerat). De ser identiska ut men har olika byte-representationer.

Kryptografiska system som inte normaliserar Unicode före hashing kan ge olika hashvärden för visuellt identiska strängar. NFKC-normalisering rekommenderas ofta innan kryptografiska operationer utförs på text.

Välja rätt kodning för kryptografi

Vid implementering av kryptografiska system är valet av kodning ett kritiskt beslut som måste dokumenteras. Lösenord bör kodas som UTF-8 innan de hashas. Protokollfält bör ange kodningen i protokollspecifikationen.

Interoperabilitetsfel som orsakas av kodningsskillnader är en vanlig källa till buggar i kryptografiska system. Två implementationer av samma protokoll kan ge olika autentiseringsresultat om de kodar strängar på olika sätt.

Frågesport om UTF-8-kodning

Testa din förståelse av UTF-8-kodning.

Viktiga slutsatser: textkodning

ASCII omfattar 128 tecken med 7 bitar. Unicode tillhandahåller ett universellt kodpunktsutrymme för alla mänskliga skriftsystem. UTF-8 kodar Unicode med 1–4 byte, där ASCII är en delmängd på 1 byte.

I kryptografi är kodning viktig eftersom hashfunktioner arbetar med byte. Samma text i olika kodningar ger olika hashvärden. Unicode-normalisering är nödvändig före kryptografiska operationer på text.

Gratis att börja

Lär dig Cryptology Academy med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
67
Lektioner
261

Vanliga frågor

Är lektionen ”ASCII, Unicode och textrepresentation” gratis?

Ja – hela texten till ”ASCII, Unicode och textrepresentation” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Cryptology Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Cryptology Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”ASCII, Unicode och textrepresentation”?

Förstå hur text blir byteföljder och varför teckenkodning är viktig i kryptografiska sammanhang. Ni övar på Cryptology Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Cryptology Academy?

Du behöver inga förkunskaper. Utbildningen i Cryptology Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”ASCII, Unicode och textrepresentation”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Cryptology Academy-lektionen?

Ja. Varje Cryptology Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Base64-kodning: så fungerar den
  2. ASCII, Unicode och textrepresentation
  3. Hexadecimal visning av kryptografiska resultat
  4. Kodning kontra kryptering kontra hashing
← Tillbaka till Cryptology Academy