2014-12-20 17 views
6

ho trovato diverse soluzioni in cui posso utilizzare il .Net RSA Provider per crittografare un messaggio con la chiave pubblica e decodificarlo con quello privato.Come cifrare con la chiave privata e decifrare con la chiave pubblica in C# RSA

Ma quello che voglio è criptare con la chiave privata e decifrare con la chiave pubblica.

Voglio memorizzare la chiave pubblica nella mia app e crittografare una licenza per esempio sulla mia macchina di sviluppo con la chiave privata, inviarla all'app e lasciare che le informazioni vengano decodificate con la chiave pubblica.

Come posso ottenerlo?

+1

Non è possibile. È possibile crittografare solo con la chiave pubblica e decifrare con la chiave privata. Ciò che intendi è la firma e la verifica, che è un'applicazione valida per una licenza. Ottieni l'autenticazione, ma ** no ** riservatezza. Se vuoi renderlo interattivo, puoi ovviamente ottenere di più. –

+1

** Crittografia/decrittografia asimmetrica: ** chiunque può crittografare (utilizzando una chiave pubblica), solo l'host può decrittografare (utilizzando una chiave privata). ** Firma/verifica asimmetrica: ** solo l'host può firmare (utilizzando una chiave privata), tutti possono verificare (utilizzando una chiave pubblica). –

+0

Hai controllato questo http://www.codeproject.com/Articles/38739/RSA-Private-Key-Encryption –

risposta

6

È possibile utilizzare la generazione di firme, in cui la chiave privata viene utilizzata per generare una firma che verifica che il messaggio sia autentico.

// Create message and signature on your end 
string message = "Here is the license message"; 

var converter = new ASCIIEncoding(); 
byte[] plainText = converter.GetBytes(message); 

var rsaWrite = new RSACryptoServiceProvider(); 
var privateParams = rsaWrite.ExportParameters(true); 

// Generate the public key/these can be sent to the user. 
var publicParams = rsaWrite.ExportParameters(false); 

byte[] signature = 
    rsaWrite.SignData(plainText, new SHA1CryptoServiceProvider()); 

// Verify from the user's side. Note that only the public parameters 
// are needed. 
var rsaRead = new RSACryptoServiceProvider(); 
rsaRead.ImportParameters(publicParams); 
if (rsaRead.VerifyData(plainText, 
         new SHA1CryptoServiceProvider(), 
         signature)) 
{ 
    Console.WriteLine("Verified!"); 
} 
else 
{ 
    Console.WriteLine("NOT verified!"); 
} 

si può prendere ulteriore aiuto da HERE

+1

Ho rimosso il termine "strategia di firma" in quanto non ho mai sentito parlare della generazione delle firme per essere descritta in questo modo. –

+4

Che cosa succede se si desidera crittografare effettivamente i dati, non solo convalidare l'autenticità utilizzando un hash? –

Problemi correlati