2010-02-02 44 views
8

Me gustaría generar una clave privada en java, guardarla como una cadena codificada de 64 bases en algún archivo y luego encriptar algunas frases en C# utilizando este archivo guardado. Sé que generar claves en Java y codificar con 64 base. Mi pregunta es ¿cómo uso esta clave en C#? Este es un prototipo de código java para guardar la clave privada en un archivo de texto:RSA: ¿Cómo generar clave privada en java y usarla en C#?

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); 
RSAKeyGenParameterSpec spec = new RSAKeyGenParameterSpec(1024, RSAKeyGenParameterSpec.F4); 
keyGen.initialize(spec); 
KeyPair keyPair = keyGen.generateKeyPair(); 
PrivateKey privateKey = keyPair.getPrivate(); 
writeToFile("privateKey", Base64.encode(keyPair.getPrivate().getEncoded())); 

me gustaría poner en práctica siguiente función en C#, pero no puedo encontrar la forma de crear RSAParameters o RSACryptoServiceProvider de clave privada

public static string DecryptData(string privateKey64Base, string data64Base) 
{ 
    // create using privateKey64Base 
    // create RSACryptoServiceProvider rsa using RSAParameters above 
    // byte[] encryptedData = rsa.Encrypt(Convert.FromBase64String(data64Base); 
} 
+0

Estoy seguro de que ya se ha preguntado ... No puedo encontrar –

Respuesta

5

This page contiene consejos para su situación, ya que está escribiendo a cabo PKCS # 8 teclas (con keyPair.getPrivate(). getEncoded())

Usando este enfoque se utilizaría la utilidad en el lado de Java para obtener la clave privada en el formato PRIVATEKEYBLOB en primer lugar.

Alternativamente, podría utilizar BouncyCastle C# que puede leer la clave (ver, por ejemplo, Org.BouncyCastle.Security.PrivateKeyFactory.CreateKey - necesitaría decodificar Base64 primero, por supuesto).

Esta pregunta anterior tiene la respuesta para la conversión del objeto clave de AC resultante a RSACryptoServiceProvider: BouncyCastle RSAPrivateKey to .NET RSAPrivateKey

En tercer lugar, es posible que desee buscar en el uso un almacén de claves, por ejemplo, PKCS # 12, que es una forma más estándar (y segura) de almacenar claves privadas.

+0

Gracias! ¿Podría recomendar alguna lectura en el almacén de claves? Lo encuentro bastante a menudo, pero no entiendo el concepto. – Moisei

+0

+1, no pude acceder al artículo durante unos días porque el sitio web no estaba disponible, sería genial si pudiera pegar el código aquí o agregar una referencia a sitios web más persistentes como Github. – AaA

Cuestiones relacionadas