6

I'm told that for asymmetric cryptography you encrypt plaintext with your public key and decrypt it with your private key. So i've tried the following:

    static void Main(string[] args)
    {
        RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
        string pubkey = rsa.ToXmlString(false);
        string prikey = rsa.ToXmlString(true);

        byte[] someThing = RSAEncrypt(Encoding.Unicode.GetBytes("Hello World"), pubkey);
        byte[] anotherThing = RSADecrypt(someThing, prikey);

        Console.WriteLine(Convert.ToBase64String(anotherThing));
    }

and the encrypt and decrypt functions

    public static byte[] RSAEncrypt(byte[] plaintext, string destKey)
    {
        byte[] encryptedData;
        RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
        rsa.FromXmlString(destKey);
        encryptedData = rsa.Encrypt(plaintext, true);
        rsa.Dispose();
        return encryptedData;
    }

    public static byte[] RSADecrypt(byte[] ciphertext, string srcKey)
    {
        byte[] decryptedData;
        RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
        rsa.FromXmlString(srcKey);
        decryptedData = rsa.Decrypt(ciphertext, true);
        rsa.Dispose();
        return decryptedData;
    }

I'm expecting the console to display Hello World, but it displays this SABlAGwAbABvACAAVwBvAHIAbABkAA==. Am i using RSACryptoServiceProvider wrongly?

MonoShiro
  • 73
  • 1
  • 2
  • 7

2 Answers2

6

It is base 64, decode the string and you will get "Hello world".

Blady214
  • 729
  • 6
  • 19
3

Your last line should read:

 Console.WriteLine(Encoding.Unicode.GetString(anotherThing));

Currently you are converting the decrypted string to Base64 encoding

Alex
  • 21,273
  • 10
  • 61
  • 73