La herramienta que necesitas, lista para usar

Codificador y decodificador Base64

Escriba un texto en el cuadro de texto y se codifica al instante en el cuadro Base64; pegue un valor en el cuadro Base64 y se decodifica a texto. Los valores con envoltorio, como una cabecera Authorization: Basic, un asunto de correo =?ISO-8859-1?B?…?= o una dirección data:, se leen tal cual, y la codificación del texto (UTF-8, Windows-1252, UTF-16) se detecta sola. Debajo se ve, bit a bit, cómo 3 bytes se convierten en 4 caracteres y por qué otra herramienta puede dar un resultado distinto.

Última modificación 2026-10-21Todo el cálculo ocurre en tu navegador
Ejemplos

Origen
Base64

    Carril de grupos

    Grupos de 3 bytes que se convierten en 4 caracteres Base64. Elija un grupo con las flechas para ver sus bits en la lupa.
    Lupa de grupo

    Mismo texto, otro Base64Cuando otra herramienta da un resultado distinto · pulse para copiar

      Última modificación 2026-10-21No guardamos lo que escribes

      Criterio ROBERINLa herramienta que necesitas,
      lista para usar.
      • Claro a primera vistaEntradas y resultados donde los esperas.
      • Primero el resultadoLa cifra clave va primero; el proceso solo cuando lo necesitas.
      • Pedir menosSin registro ni datos innecesarios.

      Base64 convierte 3 bytes en 4 caracteres

      La codificación Base64 toma los datos de 3 en 3 bytes (24 bits), divide esos bits en cuatro grupos de 6 y escribe cada número del 0 al 63 con uno de estos 64 caracteres: A-Z, a-z, 0-9, + y /. Por eso tres bytes siempre se convierten en cuatro caracteres y el resultado ocupa aproximadamente un 33 % más que el original. El texto se transforma antes en bytes: «¡Hola, señor! 👋» son 20 bytes (la ñ y la ¡ ocupan dos bytes en UTF-8 y el emoji, cuatro) y se convierte en wqFIb2xhLCBzZcOxb3IhIPCfkYs=, de 28 caracteres y con un = al final. Base64 no es un cifrado, así que cualquiera puede revertirlo.

      La herramienta de arriba permite editar cualquiera de los dos cuadros. Si cambia el texto, se codifica; si pega un valor en el cuadro Base64, se decodifica. También quita el envoltorio de valores como una cabecera Authorization: Basic, un asunto de correo del tipo =?ISO-8859-1?B?…?=, una dirección data:, un certificado PEM o un -EncodedCommand de PowerShell. Los bytes que no son UTF-8 válido se prueban como Windows-1252 o UTF-16, o se muestran como archivo (por ejemplo, PNG o PDF). La ruta de lectura enseña los pasos de la conversión, y el carril de grupos y la lupa muestran dónde 3 bytes se convierten en 4 caracteres.

      Cuándo hay que decodificar o crear Base64 a mano

      • Para comprobar una cabecera de autenticación HTTP Basic: la RFC 7617 une el usuario, dos puntos (:) y la contraseña, lo codifica en Base64 y lo envía tras Authorization: Basic. Por ejemplo, admin:1234 es YWRtaW46MTIzNA==. Eso significa también que cualquiera que vea la cabecera puede leer la contraseña, así que Basic solo debe usarse sobre HTTPS.
      • Cuando el asunto de un correo aparece como =?ISO-8859-1?B?…?=: las cabeceras de correo solo admiten ASCII, de modo que un asunto con tildes, ñ o signos como ¡ se escribe como encoded-word de la RFC 2047. Lo que hay entre los primeros signos de interrogación (aquí ISO-8859-1) es la codificación de caracteres y la B indica Base64. Si pega la cabecera completa, la herramienta la decodifica con la codificación indicada: =?ISO-8859-1?B?UGVkaWRvIGVudmlhZG86IG66IDIwMjYsIKFncmFjaWFzIQ==?= se lee como «Pedido enviado: nº 2026, ¡gracias!». El estándar de codificación de WHATWG trata ISO-8859-1 como Windows-1252.
      • Al leer valores de configuración o un Secret de Kubernetes: los valores del campo data de un Secret de Kubernetes deben ser cadenas en Base64; si no quiere codificarlos, existe el campo stringData. La herramienta sirve para saber qué contiene un valor guardado o para generar el Base64 de uno nuevo.
      • Para meter una imagen o un PDF dentro de un JSON: Base64 es una forma habitual de llevar los bytes de un archivo en un formato que solo admite texto. Si el valor del cuadro Base64 no es texto, la herramienta muestra el tipo y el tamaño y permite guardarlo como archivo.
      • Para ver el contenido de un JWT: cada parte de un JWT separada por puntos es Base64url (RFC 7515): caracteres URL-safe y sin el = final. La cabecera y el contenido (payload) también se decodifican aquí, pero la firma no se verifica.
      • Para crear o revisar un valor de PowerShell -EncodedCommand: la documentación de PowerShell indica que el valor debe ser el Base64 de una cadena en UTF-16LE. El mismo Get-Date es R2V0LURhdGU= en UTF-8 y RwBlAHQALQBEAGEAdABlAA== en UTF-16LE.
      • Al trabajar con archivos de certificados y claves (PEM): el cuerpo entre líneas como -----BEGIN CERTIFICATE----- es Base64, partido en líneas de 64 caracteres según la RFC 7468. Al decodificarlo se obtienen bytes en formato DER.

      Cómo se usa

      1. Codificar: escriba o pegue un texto en el cuadro de texto, o elija un archivo con «Añadir archivo». También puede arrastrar o pegar un archivo en el cuadro de texto. El Base64 aparece enseguida en el cuadro Base64.
      2. Decodificar: pegue un valor en el cuadro Base64. No importa que lleve comillas o el nombre de una cabecera alrededor. El texto aparece en el cuadro de texto; si los bytes no son texto, una tarjeta de archivo indica el tipo y el tamaño.
      3. Elegir la forma: en la barra de ajustes puede elegir entre estándar (+ /) y URL-safe (- _), con = o sin =, y una sola línea o líneas de 76 o de 64 caracteres. La forma de un valor pegado se copia a los ajustes, de modo que, si edita el texto decodificado, se vuelve a generar con la misma forma.
      4. Codificación del texto: por defecto se detecta sola. Si el texto decodificado se ve raro, elija usted UTF-8, UTF-16LE, Windows-1252 u otra codificación. Si el cuadro contiene un valor por línea, active «Cada línea por separado».
      5. Comprobar: la ruta de lectura muestra el envoltorio quitado, los espacios ignorados y el relleno añadido. Al pulsar un grupo del carril, la lupa enseña sus bits. Si otra herramienta da un resultado distinto, busque la causa en la lista «Mismo texto, otro Base64» y pulse una fila para copiar ese valor.

      La regla por la que 3 bytes se convierten en 4 caracteres

      Tomemos los tres bytes ASCII de «Sol»: 53 6F 6C. Unidos forman 24 bits; cortados de 6 en 6 dan cuatro números entre 0 y 63; si los busca en el alfabeto de más abajo, obtiene U29s.

      Cómo se convierte «Sol» (53 6F 6C) en Base64
      PasoPrimer byteSegundo byteTercer byte
      Bytes536F6C
      De 8 en 8 bits010100110110111101101100
      De 6 en 6 bits010100 · 110110 · 111101 · 101100
      Número20 · 54 · 61 · 44
      CarácterU · 2 · 9 · s

      Cuando los datos no se dividen exactamente en grupos de 3 bytes, los bits que faltan se rellenan con 0 para completar el último carácter y los huecos vacíos se escriben con =. Si sobra un byte, resultan 2 caracteres y ==; si sobran dos bytes, 3 caracteres y =. La RFC 4648 establece que el codificador rellena con ceros y que el decodificador puede rechazar cualquier otro valor.

      Bytes sobrantes y relleno (mismo planteamiento que los ejemplos de la sección 10 de la RFC 4648)
      TextoBytesBase64Sin =
      Sol3U29sU29s
      So2U28=U28
      S1Uw==Uw
      😀48J+YgA==8J+YgA
      Alfabeto Base64: número = fila + columna (el 62 y el 63 son - y _ en URL-safe)
      +0+1+2+3+4+5+6+7
      0ABCDEFGH
      8IJKLMNOP
      16QRSTUVWX
      24YZabcdef
      32ghijklmn
      40opqrstuv
      48wxyz0123
      56456789+ / -/ / _

      Cuánto mide el Base64

      Con relleno, la longitud es 4 × ⌈n ÷ 3⌉ (n = número de bytes); sin relleno, ⌈4n ÷ 3⌉. Lo que cuenta es el número de bytes, no el de caracteres. En UTF-8 una letra sin tilde ocupa 1 byte, una vocal con tilde o la ñ ocupan 2 y un emoji, 4, así que un texto con muchos acentos o símbolos crece más que uno en ASCII puro. Si se parte cada 76 caracteres con un salto CRLF, como hace el correo, cada línea suma 2 caracteres.

      Longitud del Base64 según el tamaño original (caracteres)
      OriginalBytesCon =Sin =Líneas de 76 (CRLF)Aumento
      Hello587860 %
      ¡Hola, señor! 👋2028272840 %
      100 bytes10013613413836 %
      1 KiB102413681366140233,6 %
      1 MiB1.048.5761.398.1041.398.1021.434.89633,3 %
      5 MiB (límite de archivo)5.242.8806.990.5086.990.5077.174.46833,3 %

      Estándar, URL-safe, MIME y PEM: en qué se diferencian

      Los nombres cambian, pero el cálculo de 3 bytes a 4 caracteres es el mismo. Solo varían tres cosas: los caracteres 62 y 63, el = final y el salto de línea.

      Comparación de variantes de Base64
      Variante62 y 63= finalSalto de líneaUso habitualFuente
      Estándar+ /Se mantieneNingunoDatos en general, direcciones data:, Basic authRFC 4648, sección 4
      URL-safe- _Se mantiene o se quitaNingunoValores en URL y nombres de archivoRFC 4648, sección 5
      JWT (Base64url)- _Se quitaNingunoLas tres partes de un JWT o JWSRFC 7515, sección 2
      MIME (correo)+ /Se mantieneLíneas de 76 caracteres como máximoCuerpo y adjuntos del correoRFC 2045, sección 6.8
      PEM+ /Se mantieneLíneas de 64 caracteres (salvo la última)Archivos de certificados y clavesRFC 7468, sección 2
      Comando GNU base64+ /Se mantiene76 por defecto; con -w 0, una líneaLínea de comandos de LinuxManual de coreutils

      Las reglas de decodificación también varían en rigor. La RFC 4648 manda rechazar los caracteres ajenos al alfabeto, mientras que la RFC 2045, la del correo, manda ignorar los saltos de línea y los caracteres que no están en la tabla. La función atob() del navegador solo elimina los espacios y falla si encuentra - o _ (forgiving-base64 de WHATWG). Esta herramienta ignora saltos de línea y espacios, devuelve a su carácter los %2B, %2F y %3D de las URL y los \n escritos en JSON, y acepta caracteres estándar y URL-safe. Ante cualquier otro se detiene e indica su posición.

      El mismo texto da un Base64 distinto en cada codificación

      Base64 solo escribe bytes como caracteres, así que el resultado depende de en qué bytes se haya convertido el texto, es decir, de la codificación. El ASCII puro, como Hello, tiene los mismos bytes en UTF-8 y en Windows-1252 y por eso el Base64 coincide. Las letras con tilde y la ñ sí difieren entre ambas, y UTF-16 duplica cada carácter, de modo que ningún resultado se repite. El símbolo € es un buen ejemplo: en Windows-1252 es el byte 80 y en UTF-8 son tres bytes.

      El mismo texto en cada codificación, en Base64 (con =)
      TextoUTF-8Windows-1252UTF-16LEUTF-16BE
      señorc2XDsW9yc2Xxb3I=cwBlAPEAbwByAA==AHMAZQDxAG8Acg==
      ¿Qué?wr9RdcOpPw==v1F16T8=vwBRAHUA6QA/AA==AL8AUQB1AOkAPw==
      HelloSGVsbG8=SGVsbG8=SABlAGwAbABvAA==AEgAZQBsAGwAbw==
      €4oKsgA==rCA=IKw=

      La detección automática mira primero los bytes iniciales por si son la firma de un archivo, como PNG o JPEG. Después prueba, por orden, (1) una codificación indicada o fija, como en un asunto de correo, una dirección data: o PowerShell; (2) un BOM al principio (EF BB BF, FF FE, FE FF); (3) la forma de UTF-16, con un byte 00 tras cada carácter ASCII; (4) UTF-8, y se queda con la primera lectura sin caracteres de control. Si ninguna sirve, lee los bytes como EUC-KR, Shift_JIS, Windows-1252 y UTF-16 sin bytes 00, y elige la lectura que mejor se llena con las letras propias de esa codificación (hangul, kana y kanji, letras latinas con tilde). Si hay empate, gana la codificación del idioma de la página (en esta, Windows-1252). Los bytes por sí solos no demuestran la codificación, así que, si el resultado parece raro, elíjala usted en la barra de ajustes.

      Envoltorios que la herramienta quita de los valores pegados

      Un valor copiado suele llevar alrededor del Base64 el nombre de una cabecera o una marca de formato. Las formas de la tabla se desenvuelven y solo se lee el Base64 interior; al editar el texto, se vuelve a poner el mismo envoltorio (salvo en un JWT, que necesita su firma). Si pulsa la x del botón «Envoltorio conservado» en la ruta de lectura, se quita el envoltorio.

      Envoltorios que reconoce la herramienta
      FormaEjemploQué hace
      Basic authAuthorization: Basic cm9i…Se lee primero como UTF-8
      Asunto de correo=?ISO-8859-1?B?UGVkaWRv…?=Se lee con la codificación indicada; varias palabras se unen; al regenerarlo, cada palabra se mantiene en 75 caracteres o menos
      Dirección data:data:image/png;base64,iVBOR…Se usan el tipo y el charset; si falta ;base64, avisa de que no es Base64
      PEM-----BEGIN CERTIFICATE-----Solo se lee el cuerpo y se mantienen las líneas de 64 caracteres
      PowerShellpowershell -EncodedCommand RwBl…Se lee como UTF-16LE
      JWT, BearereyJhbGci….eyJzdWIi….firmaLa cabecera y el contenido se decodifican en líneas separadas; la firma se omite
      Comillas, Python"SGVsbG8=", b'SGVsbG8='Solo se quitan las comillas
      %XX en una URLSGVsbG8%3D%2B, %2F y %3D se convierten de nuevo en +, / y =
      \n dentro de un JSONMIIB…\nMIIC…Se toma como salto de línea y se ignora

      Cuando no se decodifica: causas según el error

      Si no se puede leer el valor del cuadro Base64, la línea de estado indica en qué carácter se detuvo y muestra los caracteres de alrededor. El cuadro de texto queda atenuado y conserva el último resultado leído con éxito.

      Errores y avisos
      EstadoEjemploCausaSolución
      Carácter que no es Base64SGVs bG8!Se han colado caracteres como !, : o letras con tildeQuitar el texto explicativo y los símbolos y dejar solo el valor
      Longitud incorrectaSGVsbEn el último grupo de 4 solo queda 1 carácterComprobar si al copiar se ha perdido o añadido un carácter
      Número de = incorrectoSGVsbG8==Con esta longitud corresponde exactamente un =Quitar un =
      Caracteres tras =SGVsbG8=V29ybGQ=Hay dos valores pegadosSepararlos en líneas y activar «Cada línea por separado»
      Bits finales distintos de 0 (aviso)SGVsbGLos bits sobrantes del último carácter no son 0, así que el final puede estar cortado (se decodifica como Hell)Revisar el final del original
      No es UTF-8 válidoUulzdW3pBytes de otra codificación, aquí Windows-1252 (Résumé)Mirar el resultado de la detección automática o elegir la codificación
      Parece un archivoiVBORw0KGgo…Bytes que no son texto (este es la firma de un PNG)Guardarlo desde la tarjeta de archivo

      Cuando el resultado difiere del de otra herramienta

      Si introduce el mismo texto y el Base64 sale distinto, casi siempre son distintos los bytes o los ajustes de forma. La lista «Mismo texto, otro Base64» que hay bajo la herramienta recalcula los casos siguientes con su texto actual y muestra la primera diferencia.

      Causas habituales de que el resultado cambie
      CausaTextoDiferencia
      Salto de línea final añadido por echohelloprintf da aGVsbG8= y echo da aGVsbG8K
      Saltos de línea LF o CRLFPrimera línea ↵ Segunda líneaLF UHJpbWVyYSBsw61uZWEKU2VndW5kYSBsw61uZWE=, CRLF UHJpbWVyYSBsw61uZWENClNlZ3VuZGEgbMOtbmVh
      Codificación del textoseñorUTF-8 c2XDsW9y, Windows-1252 c2Xxb3I=
      Estándar o URL-safe😀8J+YgA==, 8J-YgA==
      RellenoHelloSGVsbG8=, SGVsbG8
      Salto de líneaUn archivo grandebase64 de GNU parte cada 76 caracteres; con -w 0 deja una sola línea
      Tolerancia del decodificadorZm9v-_Python b64decode() descarta - y _ por defecto y deja solo b'foo'; esta herramienta los lee como caracteres URL-safe

      Hacerlo en código

      La función btoa() del navegador lanza InvalidCharacterError con cualquier carácter que no quepa en un byte, como € o un emoji. Con ñ no da error, pero codifica el byte Latin-1 (btoa('ñ') da 8Q==) y no el UTF-8 (w7E=), así que conviene pasar antes el texto a bytes UTF-8. El nuevo Uint8Array.prototype.toBase64() funciona desde Chrome 140, Firefox 133 y Safari 18.2.

      // JavaScript: convertir antes el texto en bytes UTF-8 (válido para textos cortos)
      const bytes = new TextEncoder().encode('señor');
      const b64 = btoa(String.fromCharCode(...bytes));          // c2XDsW9y
      const back = new TextDecoder().decode(Uint8Array.from(atob(b64), c => c.charCodeAt(0)));
      bytes.toBase64({ alphabet: 'base64url', omitPadding: true }); // API más reciente
      
      # Python
      import base64
      base64.b64encode('señor'.encode('utf-8'))   # b'c2XDsW9y'
      base64.b64decode('SGVsbG8')                 # sin = al final: binascii.Error: Incorrect padding
      base64.b64decode('Zm9v-_', validate=True)   # da error en lugar de descartar los caracteres ajenos al alfabeto
      
      # Línea de comandos
      printf '%s' 'señor' | base64    # echo añade un salto de línea final
      base64 -w 0 informe.pdf         # GNU: sin partir líneas (el base64 de macOS usa una línea por defecto; -b 76 parte)

      Errores frecuentes

      • Creer que Base64 es un cifrado: cualquiera puede revertirlo sin clave. Pasar una contraseña o un token a Base64 no los oculta.
      • Usar tal cual un valor creado con echo: echo añade un salto de línea final y el resultado acaba distinto, por ejemplo en K o en o=. Use printf '%s' o echo -n.
      • Cambiar mayúsculas y minúsculas: Base64 trata las mayúsculas y las minúsculas como caracteres distintos. Si las cambia para uniformar el texto, obtiene otros datos o un valor que ya no se decodifica.
      • Poner Base64 estándar directamente en la consulta de una URL: al interpretar datos de formulario el + se convierte en un espacio, y / y = también tienen significado dentro de una URL. Use URL-safe o codifique el valor con porcentajes.
      • Codificar dos veces: si el resultado decodificado sigue pareciendo Base64, junto a la línea de estado aparece el botón «Decodificar otra vez».
      • Olvidar el prefijo data: de una imagen: en HTML o CSS hace falta el prefijo data:image/png;base64,. Para imágenes, el conversor de imagen a Base64 genera también las formas para HTML y CSS.

      Limitaciones

      • Se pueden añadir archivos de hasta 5 MB (unos 7 millones de caracteres en Base64). Si el texto de un cuadro supera los 400.000 caracteres, solo se ven el principio y el final; al copiar o guardar se incluye entero.
      • La detección automática es una estimación a partir de la forma de los bytes. Un valor corto puede leerse en varias codificaciones, así que puede equivocarse.
      • Se pueden generar UTF-8, UTF-16LE y BE, EUC-KR (CP949), Shift_JIS y Windows-1252. Una codificación indicada en el asunto de un correo que la herramienta no puede generar, como ISO-2022-JP, solo se lee; si edita el texto decodificado, se vuelve a generar en UTF-8.
      • No se verifica la firma de un JWT ni se decodifica la codificación Q de un asunto de correo (=?…?Q?…?=).
      • Un cuadro de texto del navegador convierte los saltos de línea en LF, así que los saltos del cuadro de texto se codifican como LF. Si necesita CRLF, copie la fila CRLF de «Mismo texto, otro Base64».
      • El carril de grupos dibuja los primeros 480 grupos (1440 bytes). El resto también se convierte y se copia.
      • Todo se convierte dentro de este navegador; el valor que introduce no se envía a ningún servidor ni se guarda en la dirección ni en el almacenamiento.

      Fuentes

      Criterio: el formato Base64 sigue la RFC 4648, los usos en correo, PEM, cabeceras de autenticación y JWT siguen sus propias RFC, el comportamiento del navegador sigue los estándares de WHATWG y MDN, y el de la línea de comandos y de cada lenguaje sigue su manual; todo se comprobó el 21 de octubre de 2026. Los valores de las tablas se contrastaron con esta herramienta y con el módulo base64 de Python 3.14.

      Preguntas frecuentes

      ¿Base64 es un cifrado?

      No. Base64 solo escribe bytes con 64 caracteres imprimibles, así que cualquiera puede recuperar el valor original sin clave. Por ejemplo, YWRtaW46MTIzNA== en una cabecera Basic se decodifica directamente como admin:1234. Para proteger una contraseña o un token hay que usar HTTPS y un cifrado real.

      ¿Por qué el mismo texto da un Base64 distinto en otras webs?

      Casi siempre porque los bytes son distintos. «señor» es c2XDsW9y en UTF-8, c2Xxb3I= en Windows-1252 y cwBlAPEAbwByAA== en UTF-16LE. También cambian el resultado el salto de línea final que añade echo (hello pasa a ser aGVsbG8K), CRLF en lugar de LF, los caracteres URL-safe, un = que falta y las líneas de 76 caracteres. La lista «Mismo texto, otro Base64» bajo la herramienta muestra estos casos en paralelo.

      ¿Qué es el = del final y se puede quitar?

      El = es el relleno que completa el último grupo de 4 caracteres cuando procede de menos de 3 bytes; no forma parte de los datos. Si sobra un byte, se añade ==; si sobran dos, =. Algunos formatos, como JWT, mandan quitarlo y otros no, así que conviene seguir la regla de quien recibe el valor. Esta herramienta lo lee con o sin =.

      ¿Cómo se calcula la longitud del Base64?

      Con relleno es 4 × ⌈bytes ÷ 3⌉; sin relleno, ⌈4 × bytes ÷ 3⌉. Hello son 5 bytes y da 8 caracteres, «¡Hola, señor! 👋» son 20 bytes y da 28, y 1 MiB (1.048.576 bytes) da 1.398.104, es decir, un 33 % más. Si se parte cada 76 caracteres con CRLF, cada línea suma 2 caracteres.

      ¿Qué hago si el texto decodificado sale con caracteres rotos?

      Lo más probable es que los bytes originales no sean UTF-8. Si no se leen como UTF-8, esta herramienta los vuelve a probar como Windows-1252 y UTF-16. Si la é se ve como é o el texto sigue pareciendo raro, elija usted en la barra de ajustes UTF-8, UTF-16LE, Windows-1252 u otra codificación y compare.

      ¿Qué formato de Base64 debo poner en una URL?

      Lo seguro es usar Base64 URL-safe. En el estándar, el + se interpreta como un espacio al leer datos de formulario, y / y = tienen significado dentro de una URL. URL-safe cambia los caracteres 62 y 63 por - y _ (RFC 4648, sección 5); si quien recibe el valor no quiere el =, elija también «Sin =».

      ¿Cómo se lee un asunto de correo como =?ISO-8859-1?B?…?=?

      Es un encoded-word de la RFC 2047. Lo que hay entre el primer y el segundo signo de interrogación es la codificación de caracteres, la B indica Base64 y lo siguiente es el cuerpo en Base64. Si pega el valor completo en el cuadro Base64, se decodifica con la codificación indicada y los asuntos partidos en varias palabras se unen. Un valor marcado con Q no es Base64 y no se decodifica.

      ¿Puedo volver a convertir en archivo una imagen o un PDF en Base64?

      Sí. Si el valor del cuadro Base64 no es texto, la herramienta mira los primeros bytes para saber el tipo (PNG, JPEG, PDF, ZIP…), muestra una tarjeta de archivo y permite guardarlo. En sentido contrario, «Añadir archivo» convierte archivos de hasta 5 MB. Todo ocurre en el navegador y no se envía nada a ningún servidor.