5
votes

I'm new to RSA encryption and I've been trying to learn how exactly it works using .Net's System.Security.Cryptography.

    public String Encryption(Byte[] Input, RSAParameters PublicKey)
    {
        RSAC = new RSACryptoServiceProvider();
        RSAC.ImportParameters(PublicKey);
        Byte[] Encrypt = RSAC.Encrypt(Input, false);
        return Convert.ToBase64String(Encrypt);
    }

Using the above code, I get a different encrypted string for the same intput, anytime I restart the application. I would like to know if this is a normal behavior and in case it is not, how to prevent it.

For example the program returns the below string for the input "Hello" :

NopDAF5FRu....

When I restart the application the output for the same input will be :

pPPu8x6....

However when I create new objects for my RSA Encryption class, all objects return the same output.

1
Can you show how you've tested the last part of your question: "However when I create new objects for my RSA Encryption class, all objects return the same output." - Maarten Bodewes
RSA being random is fine. Passing false as second parameter to Encrypt is probably not fine since v1.5 padding has some serious weaknesses compared to OAEP. - CodesInChaos

1 Answers

6
votes

That's totally normal and fine. The data being encrypted is put inside a block that is padded with random values. That's then being encrypted with the public key.

See this SO Q&A for more details.