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?
davy.ai
Parece que estás intentando convertir un objeto de tipo
DerSequence
a un objeto de tipoDerBitString
y eso está resultando en un errorSystem.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 unAsn1Object
usando el métodoToAsn1Object()
, antes de convertirlo a unDerBitString
. Luego, estamos obteniendo la representación de cadena octeto delencodedPublicKey
usando el métodoGetOctets()
, antes de usarlo para crear el objetopublicKey
.Esto debería resolver el error de conversión y permitirte usar tu clave pública para el cifrado.