2012-12-06 3 views
7

Ich bin ziemlich neu bei all dieser Verschlüsselung Sache und ich versuche, eine einfache App zu tun, um eine bestimmte Zeichenfolge zu verschlüsseln. Hier ist mein Code:Verschlüsselung mit Zertifikat

public static X509Certificate2 getPublicKey() 
{ 
    RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(); 

    X509Certificate2 cert2 = new X509Certificate2("c:\\certificate.cer"); 

    return cert2; 
} 


public static string cipherRequest(byte[] stringToEncrypt) 
{ 
    X509Certificate2 certificate = getPublicKey(); 

    RSACryptoServiceProvider rsa = certificate.PublicKey.Key as RSACryptoServiceProvider; 

    byte[] cryptedData = rsa.Encrypt(stringToEncrypt, true); 

    return Convert.ToBase64String(cryptedData); 
} 

public static void Main() 
{ 

    try 
    { 

     ASCIIEncoding ByteConverter = new ASCIIEncoding(); 

     byte[] test = ByteConverter.GetBytes("stringtoencrypt"); 

     string first = cipherRequest(test); 
     string second= cipherRequest(test); 

     Console.WriteLine("first: {0}", first); 
     Console.WriteLine("second: {0}", second); 

    } 
    catch(CryptographicException e) 
    { 
     Console.WriteLine(e.Message); 
    } 

} 

Also jedes Mal, wenn ich rufe Sie die cipherRequest es unterschiedliche Ergebnisse. Ich habe überprüft, dass das Zertifikat geladen ist, aber es führt zu unterschiedlichen Ergebnissen.

Irgendwelche Gedanken?

+3

Dieses Verhalten ist konstruktionsbedingt. Gibt es ein tatsächliches Problem? – SLaks

+1

Warum haben Sie eine 'byte []' benannte Zeichenfolge? – SLaks

Antwort

7

Random Padding wird vor der eigentlichen Verschlüsselung hinzugefügt, um bestimmte Angriffe zu vermeiden. Aus diesem Grund erhalten Sie jedes Mal, wenn Sie die Verschlüsselungsmethode aufrufen, unterschiedliche Ergebnisse.

Weitere Informationen finden Sie in diesem Beitrag:

RSA in C# does not produce same encrypted string for specific keys?

+0

Danke, durch etwas mehr lesen, ich habe es geschafft, zu diesem Schluss zu kommen :) Mein schlechtes – antistes