2012-12-06 11 views
7

Sono abbastanza nuovo a tutta questa cosa di crittografia e sto provando a fare una semplice app per crittografare una determinata stringa. Ecco il mio codice:Crittografia con certificato

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); 
    } 

} 

Così, ogni volta che mi chiamano il cipherRequest produce risultati diversi. Ho controllato che il certificato sia caricato ma produce risultati diversi.

Qualche idea?

+3

Questo comportamento legato alla progettazione. C'è un problema reale? – SLaks

+1

Perché hai una stringa di nome 'byte []'? – SLaks

risposta

7

Il riempimento casuale viene aggiunto prima della crittografia effettiva per evitare determinati attacchi. Questo è il motivo per cui ottieni risultati diversi ogni volta che chiami il metodo di crittografia.

Per ulteriori informazioni, vedi questo post:

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

+0

Grazie, con qualche lettura in più sono riuscito a raggiungere questa conclusione :) Il mio male – antistes