ASCII, Unicode e rappresentazione del testo
Comprenda come il testo diventa byte e perché la codifica dei caratteri è importante nei contesti crittografici.
ASCII, Unicode e rappresentazione del testo è una lezione Cryptology Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Cryptology Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Cryptology Academy include 4 lezioni in totale.
ASCII come codifica a 7 bit
ASCII (American Standard Code for Information Interchange), standardizzato nel 1963, codifica 128 caratteri usando 7 bit (valori 0-127). Copre l'alfabeto inglese (maiuscolo e minuscolo), le cifre, la punteggiatura e i caratteri di controllo.
ASCII è stato progettato per l'inglese e per le apparecchiature di telecomunicazione americane. Funzionava bene per lo scopo previsto, ma era fondamentalmente inadeguato per qualsiasi lingua diversa dall'inglese.
Caratteri di controllo in ASCII
I primi 32 caratteri ASCII (0-31), più DEL (127), sono caratteri di controllo. In origine erano progettati per controllare le telescriventi: LF (avanzamento riga, 10), CR (ritorno a capo, 13), BEL (campanello, 7), TAB (9), ESC (27).
Nei contesti crittografici, i caratteri di controllo possono causare problemi. Un byte nullo (0x00) termina prematuramente le stringhe C e un carattere DEL o ESC potrebbe essere interpretato dagli emulatori di terminale.
ASCII esteso e i suoi problemi
Paesi diversi hanno creato proprie estensioni di ASCII usando l'ottavo bit (valori 128-255), dando origine a centinaia di codifiche incompatibili: ISO-8859-1 (Latin-1) per l'Europa occidentale, KOI-8R per il russo, Big5 per il cinese.
Un documento salvato con una codifica appare come testo illeggibile quando viene aperto con una codifica diversa. L'assenza di uno standard universale rese lo sviluppo internazionale del software una sfida significativa per tutti gli anni Ottanta e Novanta.
Unicode come set di caratteri universale
Unicode è stato creato per fornire un unico set di caratteri universale che copra tutti i sistemi di scrittura umani. Attualmente definisce oltre 149.000 caratteri che coprono 161 script, inclusi script storici e simboli.
Unicode separa l'identità del carattere (un punto di codice, come U+0041 per "A") dalla codifica (il modo in cui quel punto di codice viene memorizzato nei byte). Questa separazione consente a più formati di codifica di rappresentare gli stessi caratteri.
Codifica UTF-8 a lunghezza variabile
UTF-8 codifica i punti di codice Unicode usando da 1 a 4 byte. I caratteri ASCII (da U+0000 a U+007F) usano esattamente 1 byte, identico al relativo valore ASCII, rendendo UTF-8 compatibile a ritroso con ASCII.
I caratteri da U+0080 a U+07FF usano 2 byte. Quelli da U+0800 a U+FFFF usano 3 byte (coprendo la maggior parte degli script più comuni, inclusi cinese, giapponese e coreano). U+10000 e oltre usano 4 byte.
UTF-16 e UTF-32
UTF-16 usa 2 byte per i caratteri più comuni (il Basic Multilingual Plane, da U+0000 a U+FFFF) e 4 byte (coppie surrogate) per i caratteri oltre U+FFFF. Viene usato internamente da Windows e Java.
UTF-32 usa esattamente 4 byte per ogni punto di codice, rendendolo a larghezza fissa e facile da indicizzare in base alla posizione del carattere, ma inefficiente per il testo composto principalmente da ASCII. Viene usato in alcune rappresentazioni interne per consentire un accesso casuale rapido.
Byte Order Mark (BOM)
Il Byte Order Mark (BOM) è il carattere Unicode U+FEFF inserito all'inizio di un file per indicare l'ordine dei byte e la codifica. In UTF-16 distingue il formato big-endian (FE FF) da quello little-endian (FF FE).
In UTF-8, il BOM (EF BB BF) è superfluo, poiché UTF-8 non presenta problemi di ordine dei byte, ma alcuni software Windows lo aggiungono comunque. Ciò causa problemi nelle applicazioni crittografiche, dove il BOM viene trattato come dati anziché come marcatore.
Perché la codifica è importante in crittografia
Le funzioni hash crittografiche e i MAC operano su sequenze di byte, non su caratteri astratti. La stessa stringa "café" viene codificata in modo diverso in UTF-8 (4 byte: 63 61 66 C3 A9) rispetto a Latin-1 (4 byte: 63 61 66 E9).
Se due sistemi calcolano l'hash della stessa stringa ma usano codifiche diverse, produrranno hash diversi e l'autenticazione fallirà. I protocolli crittografici devono specificare esplicitamente la codifica per garantire l'interoperabilità.
Le emoji in UTF-8
Le emoji sono caratteri Unicode nel Supplementary Multilingual Plane. L'emoji "Grinning Face" (U+1F600) viene codificata in 4 byte in UTF-8: F0 9F 98 80.
Nei contesti di sicurezza, le emoji e i caratteri Unicode a larghezza intera sono stati usati negli attacchi omografici, in cui un URL come "xn--pple-43d.com" (che sembra "apple.com") induce gli utenti a visitare un sito dannoso.
Normalizzazione Unicode e crittografia
Alcuni caratteri possono essere rappresentati in più forme Unicode. La "e con accento acuto" può essere U+00E9 (precomposta) oppure U+0065 U+0301 (una e seguita da un accento combinante, scomposta). Queste forme hanno lo stesso aspetto, ma rappresentazioni diverse a livello di byte.
I sistemi crittografici che non normalizzano Unicode prima di calcolare l'hash possono produrre hash diversi per stringhe visivamente identiche. La normalizzazione NFKC è comunemente consigliata prima di applicare operazioni crittografiche al testo.
Scegliere la codifica corretta per la crittografia
Quando si implementano sistemi crittografici, la scelta della codifica è una decisione critica che deve essere documentata. Le password devono essere codificate in UTF-8 prima del calcolo dell'hash. I campi del protocollo devono specificare la codifica nei relativi documenti di specifica.
Gli errori di interoperabilità causati da differenze nella codifica sono una fonte comune di bug nei sistemi crittografici. Due implementazioni dello stesso protocollo possono produrre risultati di autenticazione diversi se codificano le stringhe in modo differente.
Verifica della codifica UTF-8
Verifichi la Sua comprensione della codifica UTF-8.
Concetti chiave: codifica del testo
ASCII copre 128 caratteri con 7 bit. Unicode fornisce uno spazio universale di punti di codice per tutti gli script umani. UTF-8 codifica Unicode usando da 1 a 4 byte, con ASCII come sottoinsieme a 1 byte.
In crittografia, la codifica è importante perché le funzioni hash operano sui byte. Lo stesso testo in codifiche diverse produce hash diversi. La normalizzazione Unicode è essenziale prima di eseguire operazioni crittografiche sul testo.
Impara Cryptology Academy con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 67
- Lezioni
- 261
Domande Frequenti
La lezione «ASCII, Unicode e rappresentazione del testo» è gratuita?
Sì — il testo completo di «ASCII, Unicode e rappresentazione del testo» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Cryptology Academy, passa a CoddyKit PRO. Il corso Cryptology Academy include 4 lezioni in totale.
Cosa imparerò in «ASCII, Unicode e rappresentazione del testo»?
Comprenda come il testo diventa byte e perché la codifica dei caratteri è importante nei contesti crittografici. Eserciti Cryptology Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Cryptology Academy?
Non è richiesta alcuna esperienza precedente. Cryptology Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «ASCII, Unicode e rappresentazione del testo»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Cryptology Academy?
Sì. Ogni lezione Cryptology Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Codifica Base64: come funziona
- ASCII, Unicode e rappresentazione del testo
- Esadecimale nell’output crittografico
- Codifica, crittografia e hashing a confronto