Cita:
Iniciado por MarkX Del archivo opensslkey.cs, deben extraer los metodos:
DecodeEncryptedPrivateKeyInfo,
CompareBytearrays
DecryptPBDK2
DecodePrivateKeyInfo
DecodeRSAPrivateKey
GetIntegerSize
Ejecutar la funcion DecodeEncryptedPrivateKeyInfo y esa regresa un RSACryptoServiceProvider, mas o menos asi:
RSACryptoServiceProvider lrsa = DecodeEncryptedPrivateKeyInfo(pLlavePrivadaBytes, lSecurePaswordString);
y ya con ese rsa se firma la cadena original, mas o menos asi:
MD5CryptoServiceProvider hasher = new MD5CryptoServiceProvider();
Byte[] bytesFirmados = rsa.SignData(System.Text.Encoding.UTF8.GetBytes(pC adenaOriginal), hasher);
string sellodigital = Convert.ToBase64String(bytesFirmados);
Se requerira un objeto SecureString que represente el password de la clave privada, que se obtiene asi:
SecureString lSecStr = new SecureString();
lSecStr.Clear();
foreach (char c in lPassword.ToCharArray())
lSecStr.AppendChar(c);
Ahora, con las nuevas pretensiones del SAT de hacer que solo Proveedores de Certificacion puedan finalmente generar y certificar facturas electronicas... Tendra caso realmente hacer un programa de facturacion electronica que de seguro no podras utilizar porque esos Proveedores de Certificacion deben poner a disposicion de manera gratuita al publico en general un programa de generacion de facturas...
Y como dijeron por ahi alguien, los requisitos para convertise en un Provedor Autorizado de Certificacion son inalcanzables.
Ademas ya sabemos que aunque eso ahora sea un Anteproyecto, de seguro se va a convertir en oficial en unos pocos dias sin que nadie pueda hacer nada... Asi es nuestro gobierno, ni modo...
Saludos
HOLA MarkX, QUE TAL ESTOY COMENZANDO CON ESTO DE CFD Y LEYENDO EN VARIOS FOROS HE VISTO QUE TODOS TRABAJAN CON OPENSSL DIRECTO Y PUES HE ESTADO INVESTIGANDO LA FORMA DE HACERLO DIRECTO EN .NET, ACABO DE ENCONTRAR TU CODIGO QUE PONES Y LO TRATE DE IMPLEMENTAR, ENTONCES LO ADAPTE DE LA SIGUIENTE FORMA:
string strCadenaOriginal = "||A|1|2005-09-02T16:30:00|1|ISP900909Q88|Industrias del Sur Poniente, S.A. de C.V.|Alvaro Obregón|37|3|Col. Roma Norte|México|Cuauhtémoc|Distrito Federal|México|06700|Pino Suarez|23|Centro|Monterrey|Monterrey|Nuevo Léon|México|95460|CAUR390312S87|Rosa María Calderón Uriegas|Topochico|52|Jardines del Valle|Monterrey|Monterrey|Nuevo León|México|95465|10|Caja|Vasos decorados|20|200|1|pieza|Charola metálica|150|150|IVA|52.5||";
string key=@"C:\Documents and Settings\Administrador\Mis documentos\HIT SERVICES\VS.NET\FacturacionElectronica.Net\Docs\Ce r_Sellos\aaa010101aaa_CSD_01.key";
string lPassword = @"a0123456789";
SecureString lSecStr = new SecureString();
lSecStr.Clear();
foreach (char c in lPassword.ToCharArray())
lSecStr.AppendChar(c);
//AQUI ESTA LA DUDA.. COMO INICIALIZO pLlavePrivadaBytes?
RSACryptoServiceProvider lrsa=DecodeEncryptedPrivateKeyInfo(pLlavePrivadaBy tes, lSecStr);
MD5CryptoServiceProvider hasher = new MD5CryptoServiceProvider();
Byte[] bytesFirmados = lrsa.SignData(System.Text.Encoding.UTF8.GetBytes(s trCadenaOriginal), hasher);
string sellodigital = Convert.ToBase64String(bytesFirmados);
ESPERO PUEDAS ACLARAR MI DUDA Y PUES DE PASO PUEDAS CONFIRMARME POR FAVOR SI ADAPTE BIEN EL CODIGO, SALUDOS Y ESPERO ME PUEDAS AYUDAR.