2014-12-20 13 views
6

Ich habe mehrere Lösungen gefunden, wo ich den .Net RSA Provider verwenden kann, um eine Nachricht mit dem öffentlichen Schlüssel zu verschlüsseln und entschlüsseln sie mit dem privaten.Wie mit privaten Schlüssel zu verschlüsseln und mit öffentlichen Schlüssel in C# RSA

Aber was ich haben möchte ist, mit dem privaten Schlüssel zu verschlüsseln und mit dem öffentlichen Schlüssel zu entschlüsseln.

Ich möchte den öffentlichen Schlüssel in meiner App speichern und eine Lizenz zum Beispiel auf meinem Dev-Rechner mit dem privaten Schlüssel verschlüsseln, an die App senden und die Informationen mit dem öffentlichen Schlüssel entschlüsseln lassen.

Wie kann ich das erreichen?

+1

Sie können nicht. Sie können nur mit dem öffentlichen Schlüssel verschlüsseln und mit dem privaten Schlüssel entschlüsseln. Was du meinst, ist Unterschrift und Überprüfung, die eine gültige Anwendung für eine Lizenz ist. Sie erhalten eine Authentifizierung, aber keine Vertraulichkeit. Wenn Sie das interaktiv machen wollen, können Sie natürlich mehr erreichen. –

+1

** Asymmetrische Verschlüsselung/Entschlüsselung: ** Jeder kann verschlüsseln (mit einem öffentlichen Schlüssel), nur der Host kann entschlüsseln (mit einem privaten Schlüssel). ** Asymmetrische Signatur/Verifikation: ** Nur der Host kann signieren (mit einem privaten Schlüssel), jeder kann dies überprüfen (mit einem öffentlichen Schlüssel). –

+0

Haben Sie dies überprüft http://www.codeproject.com/Articles/38739/RSA-Private-Key-Encryption –

Antwort

6

Sie können Signaturgenerierung verwenden, in der der private Schlüssel verwendet wird, um eine Signatur zu generieren, die überprüft, ob Ihre Nachricht authentisch ist.

// 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!"); 
} 

können Sie weitere Hilfe nehmen von HERE

+1

Ich habe den Begriff "Signaturstrategie" entfernt, da ich noch nie davon gehört habe, dass Signaturgenerierung auf diese Weise beschrieben wird. –

+4

Was ist, wenn Sie die Daten tatsächlich verschlüsseln wollen - nicht nur ihre Echtheit mit einem Hash validieren? –

Verwandte Themen