2011-07-09 67 views
8

he generado un nuevo par de claves pública/privada y se exportan como una cadena XML:Encriptación RSA en C#: ¿Qué parte define la clave pública?

RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(2048); 
string publicPrivateKey = RSA.ToXmlString(true); 

La cadena XML en publicPrivateKey se parece a esto (cuerdas se acortan para facilitar la lectura):

<RSAKeyValue> 
    <Modulus>t6tLd1Wi7PEkwPfx9KGP1Ps/5F2saXnOsCE2U....</Modulus> 
    <Exponent>AQAB</Exponent> 
    <P>3LJ5y4Vla7cS3XgmbIH5dQgppUHa+aSWavEOCbDRS/M....</P> 
    <Q>1QyGIAnjv4YLcRVdwXtxWkijc+aZ496qIBZnCAUUD/E....</Q> 
    <DP>0821dc0f+LBKOqIEvj4+2kJrNV5ueQesFBYkEsjPFM....</DP> 
    <DQ>ugSzX2oDJwjdGKG1OOiVcmUWAm6IU4PpOxcUYtY8TC....</DQ> 
    <InverseQ>LDQIQu+LSB6CSZBrGxNQthWi9mkuPGVZyDDr....</InverseQ> 
    <D>qZm2bXKH8WwbsJ8ZlT3S1TbgUifppLrqSRkb8XqEcMv....</D> 
</RSAKeyValue> 

La clave pública generada se debe usar en otras aplicaciones (PHP/JavaScript/JAVA) para cifrar datos. ¿Qué parte del XML anterior define la clave pública/qué parte debo enviar a los desarrolladores de las otras aplicaciones?

Y en el lado opuesto: ¿Qué define la clave privada/qué parte/partes debo almacenar para poder descifrar los datos cifrados por mi clave pública?

Respuesta

3

Las claves RSA para terceros son complicadas de generar en .NET. Si les envía este XML, no todos sus socios podrán usarlo. formato general para la clave pública es algo así:

enter image description here

el XML que ha proived es una clave privada. Para generar la clave pública debe usar el

string publicPrivateKey = RSA.ToXmlString(false); 

resultado será así:

<RSAKeyValue> 
    <Modulus>t6tLd1Wi7PEkwPfx9KGP1Ps/5F2saXnOsCE2U....</Modulus> 
    <Exponent>AQAB</Exponent> 
</RSAKeyValue> 

Es posible que desee utilizar otras partes para obtener la clave en otro formato:

http://www.codeproject.com/KB/security/RSACryptoPad.aspx

Para transferir la clave Java al formato .NET, puede usar este proyecto:

http://www.codeproject.com/KB/security/porting_java_public_key.aspx

+0

Creo que te refieres a '.ToXmlString (false)'. http://msdn.microsoft.com/en-us/library/system.security.cryptography.rsa.toxmlstring.aspx indica que el bool es includePrivateParameters. –

+2

bien, gracias. Entonces, ¿puedo enviar este XML (RSA.ToXmlString (false);) a los desarrolladores y podrán cifrar datos con PHP, JAVA, etc.? – Mike

+0

@Mike Bueno, en el mundo ideal es así :) Pero debe preguntarles sobre el formato de clave pública que necesitan de usted, y proporcione la clave en este formato. Use enlaces de respuesta, es fácil regenerar la clave pública usándolos. – VMAtm

3

Exponente y módulo definen la clave pública.

Si utiliza RSA.ToXmlString con su único parámetro includePrivateParameters establecido en false, sólo verá el formato de salida

<RSAKeyValue> 
    <Modulus>…</Modulus> 
    <Exponent>…</Exponent> 
</RSAKeyValue> 

.

+0

@Json: ¿Eso significa que tengo que enviar ambas cadenas, el módulo Y el exponente a los desarrolladores? Entonces, una clave pública siempre consta de dos cadenas separadas, ¿es correcto? – Mike

Cuestiones relacionadas