2011-01-28 32 views
8

nunca trabajo con la biblioteca de cifrado, pero quiero encriptar una cadena con clave privada y descifrarla mediante clave pública. cómo lograr esto en C#. por favor, ayúdenme con un pequeño fragmento de código. graciasCómo cifrar una cadena con clave privada y descifrar con clave pública?

+1

No debe cifrar cadenas arbitrarias con RSA. Debe encriptar una clave simétrica ** acolchada correctamente ** generada aleatoriamente con RSA. – CodesInChaos

+1

@CodeInChaos: acepto que eso es lo que RSA se usa la mayor parte del tiempo, pero usar RSA no se limita a eso. –

+0

AFAIK RSA no es seguro para codificar cadenas arbitrarias no acolchadas. – CodesInChaos

Respuesta

10

AFAIK, aunque técnicamente no hay diferencias en las matemáticas entre una clave pública y privada, debe usarlas consistentemente por razones de seguridad.

Está solicitando encriptar con la clave privada y descifrarla con la clave pública. Por lo general, este es el camino equivocado. Si desea ir en esta dirección, generalmente es una operación llamada "firma digital".

Si firma con la clave privada de modo que sea reversible con la clave pública , entonces no es realmente un secreto. Supongo que solo intenta autenticar el mensaje como legítimo del remitente. Lo que necesita son firmas digitales, que aún se realizan con la clave public-key-private-key (o "asimétrica").

Con las firmas digitales, el mensaje en sí no es secreto (no es necesario ya que cualquier persona con la clave pública podría descifrarlo de todos modos) pero está acompañado de datos adicionales, basados ​​en el mensaje, que se puede verificar con la clave pública y podría solo han sido computados por alguien con la clave privada correspondiente.

Se vería algo como lo siguiente. Ahora solo tienes que averiguar dónde conseguirás la llave.

static byte[] GenerateDigitalSignature(byte[] data, RSAParameters asymmetricKey) 
{ 
    using (var rcsp = new RSACryptoServiceProvider()) 
    using (var cp = new SHA1CryptoServiceProvider()) 
    { 
    rcsp.ImportParameters(asymmetricKey); 

    return rcsp.SignData(data, cp); 
    } 
} 
+0

Esto simplemente firma los datos. No lo encripta. –

+0

Sí ............ –

Cuestiones relacionadas