Actuacion Digital
Enviado por gatitos30 • 2 de Febrero de 2013 • 6.191 Palabras (25 Páginas) • 325 Visitas
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 representacion ASCII-Base64.
Se usa principalmente para enviar información sobre medios que estan 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's (comprobantes fiscales digitales como factura electronica, 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 caracter de la cadena que no sea un caracter base64 válido.
1.1.3. Ejemplos de Código
JAVA
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 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.
Mensaje a codificar:
Decodificar
Descripción:Decodifica un mensaje base64.
Mensaje a decodificar:
1.2. CSD o Certificado de Sello Digital
El CSD, está compuesto de una Llave Pública, una Privada y su respectiva contraseña. Sin embargo, es fundamental entender que el CSD es diferente pero no totalmente independiente de la FIEL (para tramitar un CSD el SAT necesita una FIEL) pero NO pueden ser usadas para el mismo objetivo. Su manejo debe ser bien diferenciado y utilizarlos correctamente para los trámites y procedimientos correspondientes.
El certificado de sello digital es expedido por el SAT y es para uso específico de la generación de Comprobantes Fiscales Digitales (CFD). Por medio de ellos el contribuyente podrá sellar (firmar) electrónicamente la cadena original de los comprobantes fiscales digitales (como facturas electronicas u otros) que emita en cada una de sus sucursales; así se tendrá identificado el origen del comprobante fiscal digital, junto con la unicidad y las demás características que tienen los certificados digitales (Integridad, no repudio, autenticidad y confidencialidad). El contribuyente puede optar por pedir un sello digital para cada una de las sucursales, establecimientos o locales, donde emita comprobantes fiscales digitales.
Un CSD consta de:
Archivo “.cer” (Llave Pública)
Archivo “.key” (Llave Privada)
Contraseña de Llave Privada
Adicionalmente y en caso de requerir cancelar, la Contraseña de Revocación
La extensión del certificado del CSD (certificado de sello digital) emitido por el SAT es: ".cer", que a su vez es de tipo X509 DER, a continuación un ejemplo de comando usando openssl para ver el contenido del certificado del CSD contenido en base64:
openssl x509 -inform DER -in aaa010101aaa_csd_01.cer
Cuando Solución Factible® genera una Factura Electronica
...