es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error de BouncyCastle: no se puede convertir un objeto de tipo ‘Org.BouncyCastle.Asn1.DerSequence’ a tipo ‘Org.BouncyCastle.Asn1.DerBitString’.

Intenté utilizar la solución en este enlace con mi clave pública, pero obtengo un error de conversión:

System.InvalidCastException: ‘No se puede convertir el objeto del tipo ‘Org.BouncyCastle.Asn1.DerSequence’ al tipo ‘Org.BouncyCastle.Asn1.DerBitString’.’

        Asn1Object obj = Asn1Object.FromByteArray(Convert.FromBase64String(privateKey));
        DerSequence publicKeySequence = (DerSequence)obj;
        //string testText = publicKeySequence[2].ToString();
        //publicKeySequence[1].GetDerEncoded();
        DerBitString encodedPublicKey = (DerBitString)publicKeySequence[1];
        DerSequence publicKey = (DerSequence)Asn1Object.FromByteArray(encodedPublicKey.GetBytes());

        DerInteger modulus = (DerInteger)publicKey[0];
        DerInteger exponent = (DerInteger)publicKey[1];

¿Podría alguien ayudarme a entender dónde está el error y cómo corregirlo?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que estás intentando convertir un objeto de tipo DerSequence a un objeto de tipo DerBitString y eso está resultando en un error System.InvalidCastException.

    Una forma de resolver este problema es modificar el código como sigue:

    c#
    Asn1Object obj = Asn1Object.FromByteArray(Convert.FromBase64String(publicKey));
    DerSequence publicKeySequence = (DerSequence)obj;
    DerBitString encodedPublicKey = (DerBitString)publicKeySequence[1].ToAsn1Object();
    DerSequence publicKey = (DerSequence)Asn1Object.FromByteArray(encodedPublicKey.GetOctets());
    DerInteger modulus = (DerInteger)publicKey[0];
    DerInteger exponent = (DerInteger)publicKey[1];

    Aquí, estamos convirtiendo el objeto en el índice 1 de publicKeySequence a un Asn1Object usando el método ToAsn1Object(), antes de convertirlo a un DerBitString. Luego, estamos obteniendo la representación de cadena octeto del encodedPublicKey usando el método GetOctets(), antes de usarlo para crear el objeto publicKey.

    Esto debería resolver el error de conversión y permitirte usar tu clave pública para el cifrado.

Comments are closed.