Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Encryption with certificate

I'm quite new to all this encryption thing and I'm trying to do a simple app to encrypt a given string. Here's my code:

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

}

So every time I call the cipherRequest it produces different results. I've checked the certificate is loaded but it produces different results.

Any thoughts?

like image 557
antistes Avatar asked Dec 06 '12 18:12

antistes


1 Answers

Random padding is added before the actual encryption to avoid certain attacks. This is why you are getting different results each time you call the encryption method.

For more info, see this post:

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

like image 104
Maxam Avatar answered Sep 25 '22 15:09

Maxam