Inicio  |  Timbrado  |  1.1. Base64
La LCO fue actualizada por última vez el 30/sep/2022

1.1. Base64

Base64 es un método de codificación aplicado a datos binarios para representar la información obtenida en una cadena de caracteres en código ASCII. Esto es, la información binaria se lee en grupos de bits y cada grupo se traduce en su representación ASCII-Base64.

Se usa principalmente para enviar información sobre medios que están hechos para lidiar con texto y no con información binaria.

Este procesamiento de datos es usado por Solución Factible® para asegurar su inalterabildiad cuando ésta sea recibida por nuestros servidores, por lo tanto, la información que el desarrollador o el sistema genere como output será exactamente la misma que se recibirá como input en nuestro sistema para su posterior manipulación.

Este tipo de codificación se usa en el elemento sello de los CFD (comprobantes fiscales digitales como factura electrónica, comprobantes de pago) el cual será descrito con más detalle a continuación.

1.1.1. Encoding

Si tomamos la cadena de caracteres (String):

Hola mundo

Al codificarlo en base64 el resultado es:

SG9sYSBtdW5kbw==

Las letras "Hol" de la frase codificada anteriormente equivalen a la codificación en base 64: "SG9s", el proceso para la conversión se detalla en la tabla a continuación.

Texto H o l
ASCII 72 6F 6C
Patron de bites 0 1 0 0 1 0 0 0 0 1 1 0 1 1 1 1 0 1 1 0 1 1 0 0
Index 18 6 61 44
Codificación-Base64 S G 9 s

Tabla index base64

Value Char   Value Char   Value Char   Value Char
0 A 16 Q 32 g 48 w
1 B 17 R 33 h 49 x
2 C 18 S 34 i 50 y
3 D 19 T 35 j 51 z
4 E 20 U 36 k 52 0
5 F 21 V 37 l 53 1
6 G 22 W 38 m 54 2
7 H 23 X 39 n 55 3
8 I 24 Y 40 o 56 4
9 J 25 Z 41 p 57 5
10 K 26 a 42 q 58 6
11 L 27 b 43 r 59 7
12 M 28 c 44 s 60 8
13 N 29 d 45 t 61 9
14 O 30 e 46 u 62 +
15 P 31 f 47 v 63 /

1.1.2. Decoding

Para decodificar la información se debe usar un proceso especial. Primero, se agrupa cada 4 caracteres codificados en base64 y se realinean como 3 bytes. Sin embargo, hay 2 casos que tienen que ser considerados al final del conjunto de bytes. Si los últimos caracteres de la cadena codificada en base64 se encuentran 1 o 2 caracteres '=' ó '=='. Si se encuentra un '=' entonces se debe desechar el último byte que se viene arrastrando. Si se encuentran '==' al final de la cadena, entonces, se deben desechar los 2 últimos bytes de la secuencia.

Otro proceso importante que se tiene que hacer es ignorar todo carácter de la cadena que no sea base64 válido.

1.1.3. Ejemplos de Código

JAVA

import org.bouncycastle.util.encoders.Base64;

public class Main{

    public static void main(String[] args) {
        if (args.length > 0) {
            for (int i = 0; i < args.length; i++) {
                if (args[i].equals("-e") || args[i].equals("--encode")) {
                    String toEncode = args[i + 1] != null && args[i + 1].length() > 0 ? args[i + 1] : "";
                    toEncode = new String(toEncode.getBytes());
                    byte[] data = Base64.encode(toEncode.getBytes());
                    String encoded = new String(data);
                    System.out.println("Resultado de la codificación: " + encoded);
                } else if (args[i].equals("-d") || args[i].equals("--decode")) {
                    String toDecode = args[i + 1] != null && args[i + 1].length() > 0 ? args[i + 1] : "";
                    byte[] data = Base64.decode(toDecode.getBytes());
                    String decoded = new String(data);
                    System.out.println("Resultado de la decodificación: " + decoded);
                }
            }
        }else{
            System.out.println("Nada que hacer... finalizando programa...");
        }
    }
}
                

1.1.4. Herramientas

Codificar

Descripción: Codifica un mensaje en base64.

Decodificar

Descripción:decodifica un mensaje base64.

Datos de contacto
comments powered by Disqus