Archivo KEY con diferencias

Es tan comun este tema que he decidido abrir un foro especial para este caso. Se trata de programadores que tienen problemas para crear el Sello Digital y que no pasan la validacion
alopezr40
Mensajes: 4
Registrado: Vie May 16, 2014 4:27 pm

Archivo KEY con diferencias

Mensajepor alopezr40 » Vie May 16, 2014 4:51 pm

Hola,

Tengo un sistema de Facturación y tengo un caso donde para obtener el Sello del archivo.key me indica que no es correcto, sin embargo verifico el CSD y la KEY en su sistema validaCDF y me sale que es correcto, probe el CSD y la KEY cargandolo en varias soluciones de PACs y lo validan como correcto, asumo que los archivos estan bien, cabe mencionar que no había tenido problemas de este tipo anteriormente con otros CSD.

El error se me presenta en:

seqdes = binr.ReadBytes(10); //read the Sequence OID
if (!CompareBytearrays(seqdes, OIDdesEDE3CBC)) //is it a OIDdes-EDE3-CBC ?
return null;

Donde al hacer la comparación no corresponde y me regresa null, Agradecería enormemente su apoyo, ya que estoy atorado con esto desde hace varios dias y no se que pueda ser.

Mi desarrollo esta en .NET con C#

Puse unas imagenes de las diferencias encontradas si de algo sirve.


Estoy usando esta funcion:

private static RSACryptoServiceProvider DecodeEncryptedPrivateKeyInfo(byte[] encpkcs8, SecureString secpswd)
{
// encoded OID sequence for PKCS #1 rsaEncryption szOID_RSA_RSA = "1.2.840.113549.1.1.1"
// this byte[] includes the sequence byte and terminal encoded null
byte[] OIDpkcs5PBES2 = { 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x05, 0x0D };
byte[] OIDpkcs5PBKDF2 = { 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x05, 0x0C };
byte[] OIDdesEDE3CBC = { 0x06, 0x08, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x03, 0x07 };
byte[] seqdes = new byte[10];
byte[] seq = new byte[11];
byte[] salt;
byte[] IV;
byte[] encryptedpkcs8;
byte[] pkcs8;

int saltsize, ivsize, encblobsize;
int iterations;

// --------- Set up stream to read the asn.1 encoded SubjectPublicKeyInfo blob ------
MemoryStream mem = new MemoryStream(encpkcs8);
int lenstream = (int)mem.Length;
BinaryReader binr = new BinaryReader(mem); //wrap Memory Stream with BinaryReader for easy reading
byte bt = 0;
ushort twobytes = 0;

try
{
twobytes = binr.ReadUInt16();
if (twobytes == 0x8130) //data read as little endian order (actual data order for Sequence is 30 81)
binr.ReadByte(); //advance 1 byte
else if (twobytes == 0x8230)
binr.ReadInt16(); //advance 2 bytes
else
return null;

twobytes = binr.ReadUInt16(); //inner sequence
if (twobytes == 0x8130)
binr.ReadByte();
else if (twobytes == 0x8230)
binr.ReadInt16();

seq = binr.ReadBytes(11); //read the Sequence OID
if (!CompareBytearrays(seq, OIDpkcs5PBES2)) //is it a OIDpkcs5PBES2 ?
return null;

twobytes = binr.ReadUInt16(); //inner sequence for pswd salt
if (twobytes == 0x8130)
binr.ReadByte();
else if (twobytes == 0x8230)
binr.ReadInt16();

twobytes = binr.ReadUInt16(); //inner sequence for pswd salt
if (twobytes == 0x8130)
binr.ReadByte();
else if (twobytes == 0x8230)
binr.ReadInt16();

seq = binr.ReadBytes(11); //read the Sequence OID
if (!CompareBytearrays(seq, OIDpkcs5PBKDF2)) //is it a OIDpkcs5PBKDF2 ?
return null;

twobytes = binr.ReadUInt16();
if (twobytes == 0x8130)
binr.ReadByte();
else if (twobytes == 0x8230)
binr.ReadInt16();

bt = binr.ReadByte();
if (bt != 0x04) //expect octet string for salt
return null;
saltsize = binr.ReadByte();
salt = binr.ReadBytes(saltsize);

bt = binr.ReadByte();
if (bt != 0x02) //expect an integer for PBKF2 interation count
return null;

int itbytes = binr.ReadByte(); //PBKD2 iterations should fit in 2 bytes.
if (itbytes == 1)
iterations = binr.ReadByte();
else if (itbytes == 2)
iterations = 256 * binr.ReadByte() + binr.ReadByte();
else
return null;

twobytes = binr.ReadUInt16();
if (twobytes == 0x8130)
binr.ReadByte();
else if (twobytes == 0x8230)
binr.ReadInt16();

seqdes = binr.ReadBytes(10); //read the Sequence OID
if (!CompareBytearrays(seqdes, OIDdesEDE3CBC)) //is it a OIDdes-EDE3-CBC ?
return null;

bt = binr.ReadByte();
if (bt != 0x04) //expect octet string for IV
return null;

ivsize = binr.ReadByte(); // IV byte size should fit in one byte (24 expected for 3DES)
IV = binr.ReadBytes(ivsize);

bt = binr.ReadByte();
if (bt != 0x04) // expect octet string for encrypted PKCS8 data
return null;

bt = binr.ReadByte();

if (bt == 0x81)
encblobsize = binr.ReadByte(); // data size in next byte
else if (bt == 0x82)
encblobsize = 256 * binr.ReadByte() + binr.ReadByte();
else
encblobsize = bt; // we already have the data size

encryptedpkcs8 = binr.ReadBytes(encblobsize);
//if(verbose)
// showBytes("Encrypted PKCS8 blob", encryptedpkcs8) ;

pkcs8 = DecryptPBDK2(encryptedpkcs8, salt, IV, secpswd, iterations);
if (pkcs8 == null) // probably a bad pswd entered.
return null;

//if(verbose)
// showBytes("Decrypted PKCS #8", pkcs8) ;
//----- With a decrypted pkcs #8 PrivateKeyInfo blob, decode it to an RSA ---
RSACryptoServiceProvider rsa = DecodePrivateKeyInfo(pkcs8);
return rsa;
}

catch (Exception)
{
return null;
}

finally { binr.Close(); }


}
De antemano gracias!
Adjuntos
diferencias.jpg
diferencias.jpg (108.13 KiB) Visto 4753 veces

mxgdozar
Mensajes: 10
Registrado: Vie Nov 18, 2011 8:45 am

Re: Archivo KEY con diferencias

Mensajepor mxgdozar » Mié Mar 11, 2015 12:59 pm

¿Amigo encontraste solución a este problema que tenías?

lcruz
Mensajes: 1
Registrado: Jue Abr 23, 2015 12:21 pm

Re: Archivo KEY con diferencias

Mensajepor lcruz » Jue Abr 23, 2015 12:25 pm

Hola , alguien encontro la solucion a lo aqui mencionado , tengo el mismo problema :( :cry:

siento que es el archivo .key el del problema.

saludos :)


Volver a “SELLO DIGITAL INVALIDO”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado