2012-01-18 7 views
5

Tengo el objeto AsymmetricKeyParameter para clave privada y pública. ¿Cuál es la forma más fácil de ver si coinciden?¿Cómo comprobar si el par de claves privadas/públicas coincide con (.NET/BouncyCastle)?

Estoy intentando cifrar algo de texto (clave privada) y descifrar algo de texto (clave pública). Hasta ahora no he podido hacer eso pero parece ser un enfoque equivocado.

Actualización: Aquí es código de ejemplo:

X509Certificate2 c = new X509Certificate2(@"certificate.cer"); 
byte[] privateKeyData = System.IO.File.ReadAllBytes(@"private.key"); 
Org.BouncyCastle.X509.X509Certificate cert = DotNetUtilities.FromX509Certificate(c); 


RsaPrivateCrtKeyParameters privateKey = (RsaPrivateCrtKeyParameters)PrivateKeyFactory.CreateKey(privateKeyData); 
RsaKeyParameters publicKey = (RsaKeyParameters)cert.GetPublicKey(); 

if (privateKey.Modulus.Equals(publicKey.Modulus) && publicKey.Exponent.Equals(privateKey.PublicExponent)) 
{ 
    //they match 
} 
+0

Si está descifrando con clave pública, ¿está realmente intentando firmar los datos en lugar de cifrar? – weston

+0

Quiero hacer coincidir las teclas, simplemente no sé cómo hacerlo. –

Respuesta

6

La forma más sencilla de comprobar si una clave privada y una clave pública coinciden es encriptar un dato con la clave pública y ver si puede descifrarlo con la clave privada o, alternativamente, firmar un dato con la clave privada y vea si puede verificarla con la clave pública.

Si las claves son claves RSA, puede convertir la clave pública a Org.BouncyCastle.Crypto.Parameters.RSAKeyParameters y la clave privada a Org.BouncyCastle.Crypto.Parameters.RsaPrivateCrtKeyParameters y verifique que el Modulus es el mismo y que Exponent de la clave pública es igual a PublicExponent de la clave privada. Si quieres ser realmente elegante, también puedes validar todos los parámetros restantes de la clave privada (sigue PKCS#1 sección 3.2).

+0

¡Gracias por la gran respuesta! Estoy usando la técnica de coincidencia Exponent y Modulus. –

+0

Por cierto, su primera frase no tiene mucho sentido. Debería encriptar con público y descifrar con PRIVATE ¿no? –

+0

@Evgeni Petrov: Sí, tienes razón. He corregido la oración. –

0

Estoy tratando de cifrar un texto (clave privada) y descifrar un texto (clave pública).

La clave pública no está destinada a ser utilizada para el descifrado. En PKI, la clave pública se comparte para que múltiples partes cifren los datos que pretende enviar a los titulares de la clave privada y la clave privada se utiliza para descifrar los datos enviados.

+3

Aunque la firma se realiza cifrando un hash seguro del contenido firmado con una clave privada, que luego se puede verificar descifrando con el público. Sin embargo, un pico de selección, +1 de todos modos. –

+0

Entonces, ¿cómo debo verificar si las claves públicas y privadas coinciden? –

Cuestiones relacionadas