Hola dado,
El día lunes hice una pregunta respecto a la FIRMA ELECTRÓNICA de documentos y amablemente me recomendaste algunos links para responder mis dudas, es por eso que ahora respondo en esta entrada...
Segui todos los pasos que recomendaste en esta entrada para generar el sello digital, solo que lo aplique a mi necesidad en particular que es la firma electrónica de documentos, te comento como lo hice:
1.- Descargue la cadena que usas en el ejemplo, el que ya esta libre de espacios, y los certificados.
||2.0|ABC|1234|2010-01-01T12:12:12|12345|2010|ingreso|Pago en una sola exhibicion|68.50|79.46|UCP090807ABC|UAMERO & Compañia SA de CV|Cuba|456|Col. Latinoamerica|Oaxaca|Oaxaca|Oaxaca|México|93736|MMC090909QWE|Mi Mejor Cliente SA de CV|Calle 5 de Mayo|345|Col. Bondojito|Guadalajara|Guadalajara|Guadalajara|México|48473|1|Pieza|Lapiz Berol del No. 2|2.50|2.50|12|Pieza|Borrador Saga|5.00|60.00|3|Pieza|Pluma Bic Negra|2.00|6.00|IVA|16.00|10.96|10.96||
2.- Codifico a UTF-8
3.- De la cadena resultante del paso 2 obtengo el hash correspondiente con SHA-1, y obtengo este resultado:
AE8CCF6AE672B81C9A1F33557F87A6D2DDEC02D4
4.- Hasta aquí todo concuerda con tu ejemplo, pero al firmar con el archivo aaa010101aaa_csd_01.key obtengo este resultado:
HHSgXwj7B8NbH49lCNMYZv5QFJc5i4INjODJvcIQ5j/6UM0L734TIgbDZUYXp9ovEUzUOxTlwYep6vxlV0LtHwER8ROY7RlcDDKvkYRGXcF
hrIWJg5fP+BN4GOFL2S3n8rfhhhGH3+8gMxLdMKVftmgs2/E/ErQb9KHdAJsYW5U=
Es aquí donde entro en panico... pues estaba tan cerca de lograrlo... en fin, después estuve haciendo diferentes hipótesis:
a) En realidad el Hash que tu obtienes y el que yio obtengo no es exactamente igual, debido a que uno esta en mayúsculas y otro en minúsculas...
ae8ccf6ae672b81c9a1f33557f87a6d2ddec02d4 <> AE8CCF6AE672B81C9A1F33557F87A6D2DDEC02D4
así que pruebo firmando la cadena en minusculas: ae8ccf6ae672b81c9a1f33557f87a6d2ddec02d4 y el resultado de mi firma es este:
M71dYS89XWSrLRMUBucHg8krkqaQ7O1t561P4tk+9dVIaUic2q60qzOpfMWaeDXp+tcSxSO5qZsSsBFGCa06K6AgFicJae/Y3zJvjf0X6m/C4kz
9hxPkk3ppQ5hncKnVbRd8TIgUlVM2xIaS9zvabB4AlMWLoGSE9zpnoDCWXGY=
nuevamente no coincide con el que muestras... así que formula otra hipótesis.
b) Debe tener algo que ver el little-endian byte ordering que es el que yo estaba usando, pero quiza ustedes lo hacen con el big-endian, así que modifico mi código y firmo nuevamente, pero obtengo este otro sello:
ZlyWMKBnOveEZKCLxZQAHmzaO/eShsQ2U5UUiEx8F23VqXBnmENpepPkE4f9TOLCb+oX/Y1vMt/Y72kJJxYgoCs6rQlGEbASm6m5I8US1/rpNXiaxXy
pM6u0rtqcSGlI1fU+2eJPredt7eyQppIryYMH5wYUEy2rZF09L2FdvTM=
Así que quedo demostrado que mis hipotesis no eran correctas, así que ahora quedo nuevamente con la duda... ¿cómo se que mi sello es valido?
Personalmente estoy utilizando esta dll Chilkat.dll,
http://www.example-code.com/csharp/rsa_sign_key_cer.asp y aquí existe un método para verificar la firma con la llave publica, *.cer , y la validación me dice que todo anda bien....
¿si una aplicación externa lo desea validar... que resultado le arrojara?
pues me parece que ya estoy cerca de concluir el asunto, debe haber alguna falla minima, pero en el foro pude aclarar muchas dudas que tenia al respecto...
Espero tus comentarios y el de los demas visitantes del foro, seguro en su experiencia, esto ya lo burlaron desde hace mucho...
Saludos y que tengan buen día
Resumen de los sellos obtenidos:
cadena: ae8ccf6ae672b81c9a1f33557f87a6d2ddec02d4
Little endian: M71dYS89XWSrLRMUBucHg8krkqaQ7O1t561P4tk+9dVIaUic2q60qzOpfMWaeDXp+tcSxSO5qZsSsBFGCa06K6AgFicJae/Y3zJvjf0X6m/
C4kz9hxPkk3ppQ5hncKnVbRd8TIgUlVM2xIaS9zvabB4AlMWLoGSE9zpnoDCWXGY=
Big endian: ZlyWMKBnOveEZKCLxZQAHmzaO/eShsQ2U5UUiEx8F23VqXBnmENpepPkE4f9TOLCb+oX/Y1vMt/Y72kJJxYgoCs6rQlGEbASm6m5I8US1/rpNXiaxXypM6u0rtqcS
GlI1fU+2eJPredt7eyQppIryYMH5wYUEy2rZF09L2FdvTM=
cadena: AE8CCF6AE672B81C9A1F33557F87A6D2DDEC02D4
Big endian: lVsYmwDdofQbtBI/8dssaLZfpTDdEjMg79+HEYbht/LnLdlL4Rh4E/jPl4OJhaxhwV1GhJGvMgxcGe2YE/ERAR/tQldl/Oqph8HlFDvUTBEv2qcXRmXDBiITfu8LzVD6
P+YQwr3J4IwNgos5lxRQ/mYY0whljx9bwwf7CF+gdBw=
Little endian: HHSgXwj7B8NbH49lCNMYZv5QFJc5i4INjODJvcIQ5j/6UM0L734TIgbDZUYXp9ovEUzUOxTlwYep6vxlV0LtHwER8ROY7RlcDDKvkYRGXcFhrIWJg5fP+BN4GOF
L2S3n8rfhhhGH3+8gMxLdMKVftmgs2/E/ErQb9KHdAJsYW5U=
Esteban