ASCII, Unicode y representación del texto
Comprenda cómo el texto se convierte en bytes y por qué la codificación de caracteres importa en contextos criptográficos.
ASCII, Unicode y representación del texto es una lección gratuita de Cryptology Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Cryptology Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Cryptology Academy incluye 4 lecciones en total.
ASCII como codificación de 7 bits
ASCII (American Standard Code for Information Interchange), estandarizado en 1963, codifica 128 caracteres en 7 bits (valores de 0 a 127). Incluye el alfabeto inglés (en mayúsculas y minúsculas), dígitos, signos de puntuación y caracteres de control.
ASCII se diseñó para el inglés y los equipos estadounidenses de telecomunicaciones. Funcionaba bien para su propósito original, pero era fundamentalmente inadecuado para cualquier idioma que no fuera el inglés.
Caracteres de control en ASCII
Los primeros 32 caracteres ASCII (0-31), además de DEL (127), son caracteres de control. Originalmente se diseñaron para controlar máquinas Teletype: LF (avance de línea, 10), CR (retorno de carro, 13), BEL (campana, 7), TAB (9) y ESC (27).
En contextos criptográficos, los caracteres de control pueden causar problemas. Un byte nulo (0x00) termina antes de tiempo las cadenas de C, y un carácter DEL o ESC podría ser interpretado por los emuladores de terminal.
ASCII extendido y sus problemas
Distintos países crearon sus propias extensiones de ASCII utilizando el octavo bit (valores de 128 a 255), lo que generó cientos de codificaciones incompatibles: ISO-8859-1 (Latin-1) para Europa occidental, KOI-8R para el ruso y Big5 para el chino.
Un documento guardado con una codificación aparece como texto ilegible cuando se abre con otra diferente. La falta de un estándar universal convirtió el desarrollo internacional de software en un desafío importante durante las décadas de 1980 y 1990.
Unicode como conjunto de caracteres universal
Unicode se creó para proporcionar un único conjunto de caracteres universal que abarcase todos los sistemas de escritura humanos. Actualmente define más de 149 000 caracteres que abarcan 161 sistemas de escritura, incluidos sistemas históricos y símbolos.
Unicode separa la identidad del carácter (un punto de código, como U+0041 para "A") de la codificación (la forma en que ese punto de código se almacena en bytes). Esta separación permite que varios formatos de codificación representen los mismos caracteres.
Codificación de longitud variable UTF-8
UTF-8 codifica los puntos de código Unicode utilizando de 1 a 4 bytes. Los caracteres ASCII (de U+0000 a U+007F) utilizan exactamente 1 byte, idéntico a su valor ASCII, lo que hace que UTF-8 sea compatible con ASCII.
Los caracteres de U+0080 a U+07FF utilizan 2 bytes. Los de U+0800 a U+FFFF utilizan 3 bytes (incluyen la mayoría de los sistemas de escritura comunes, como el chino, el japonés y el coreano). U+10000 y los valores posteriores utilizan 4 bytes.
UTF-16 y UTF-32
UTF-16 utiliza 2 bytes para los caracteres más comunes (el Plano Multilingüe Básico, de U+0000 a U+FFFF) y 4 bytes (pares sustitutos) para los caracteres posteriores a U+FFFF. Se utiliza internamente en Windows y Java.
UTF-32 utiliza exactamente 4 bytes por punto de código, por lo que tiene un ancho fijo y permite indexar fácilmente por posición de carácter, pero desperdicia espacio en textos compuestos principalmente por ASCII. Se utiliza en algunas representaciones internas para permitir un acceso aleatorio rápido.
Marca de orden de bytes (BOM)
La marca de orden de bytes (BOM) es el carácter Unicode U+FEFF que se coloca al principio de un archivo para indicar el orden de los bytes y la codificación. En UTF-16, distingue entre el orden de bytes más significativo primero (FE FF) y el menos significativo primero (FF FE).
En UTF-8, la BOM (EF BB BF) es innecesaria, ya que UTF-8 no presenta problemas de orden de bytes, pero algunos programas de Windows la agregan de todos modos. Esto causa problemas en aplicaciones criptográficas en las que la BOM se trata como datos en lugar de como una marca.
Por qué importa la codificación en criptografía
Las funciones hash criptográficas y los MAC operan sobre secuencias de bytes, no sobre caracteres abstractos. La misma cadena "café" se codifica de forma diferente en UTF-8 (4 bytes: 63 61 66 C3 A9) y en Latin-1 (4 bytes: 63 61 66 E9).
Si dos sistemas calculan el hash de la misma cadena, pero utilizan codificaciones diferentes, producirán hashes distintos y la autenticación fallará. Los protocolos criptográficos deben especificar explícitamente la codificación para garantizar la interoperabilidad.
Emojis en UTF-8
Los emojis son caracteres Unicode del Plano Multilingüe Suplementario. El emoji "Grinning Face" (U+1F600) se codifica en 4 bytes en UTF-8: F0 9F 98 80.
En contextos de seguridad, los emojis y los caracteres Unicode de ancho completo se han utilizado en ataques homógrafos, en los que una URL como "xn--pple-43d.com" (que parece "apple.com") engaña a los usuarios para que visiten un sitio malicioso.
Normalización Unicode y criptografía
Algunos caracteres pueden representarse de varias formas en Unicode. La "e con acento agudo" puede ser U+00E9 (precompuesta) o U+0065 U+0301 (una e seguida de un acento combinante, descompuesta). Se ven idénticas, pero tienen representaciones de bytes diferentes.
Los sistemas criptográficos que no normalizan Unicode antes de calcular el hash pueden producir hashes distintos para cadenas visualmente idénticas. Suele recomendarse la normalización NFKC antes de aplicar operaciones criptográficas al texto.
Cómo elegir la codificación adecuada para criptografía
Al implementar sistemas criptográficos, la elección de la codificación es una decisión fundamental que debe documentarse. Las contraseñas deben codificarse como UTF-8 antes de calcular su hash. Los campos de protocolo deben especificar la codificación en sus documentos de especificación.
Los fallos de interoperabilidad causados por discrepancias de codificación son una fuente común de errores en los sistemas criptográficos. Dos implementaciones del mismo protocolo pueden producir resultados de autenticación diferentes si codifican las cadenas de forma distinta.
Cuestionario sobre la codificación UTF-8
Compruebe su comprensión de la codificación UTF-8.
Conclusiones clave: codificación de texto
ASCII abarca 128 caracteres en 7 bits. Unicode proporciona un espacio universal de puntos de código para todos los sistemas de escritura humanos. UTF-8 codifica Unicode en 1 a 4 bytes, con ASCII como subconjunto de 1 byte.
En criptografía, la codificación importa porque las funciones hash operan sobre bytes. El mismo texto en codificaciones diferentes produce hashes distintos. La normalización Unicode es esencial antes de realizar operaciones criptográficas sobre texto.
Preguntas frecuentes
¿La lección «ASCII, Unicode y representación del texto» es gratis?
Sí — el texto completo de «ASCII, Unicode y representación del texto» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Cryptology Academy, actualiza a CoddyKit PRO. El curso de Cryptology Academy incluye 4 lecciones en total.
¿Qué aprenderé en «ASCII, Unicode y representación del texto»?
Comprenda cómo el texto se convierte en bytes y por qué la codificación de caracteres importa en contextos criptográficos. Practicas Cryptology Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Cryptology Academy?
No se requiere experiencia previa. Cryptology Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «ASCII, Unicode y representación del texto»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Cryptology Academy?
Sí. Cada lección de Cryptology Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Codificación Base64: cómo funciona
- ASCII, Unicode y representación del texto
- Hexadecimal en la salida criptográfica
- Codificación frente a cifrado y hashing