Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AES 256 Encryption: public and private key how can I generate and use it .net [closed]

Regarding AES 256 Encryption:

  • What is the public and private key?
  • How can I generate these two keys?
  • How can I use the public to encrypt the data?
  • How can I use the private to decrypt the data?
like image 547
Yasser-Farag Avatar asked Sep 17 '13 12:09

Yasser-Farag


People also ask

Does AES use public and private keys?

AES is a symmetric algorithm, so it does not have public and private keys - only a shared secret.

Can you encrypt with private key and decrypt with public key?

Asymmetric encryption uses a mathematically related pair of keys for encryption and decryption: a public key and a private key. If the public key is used for encryption, then the related private key is used for decryption. If the private key is used for encryption, then the related public key is used for decryption.


2 Answers

In .Net, you can create your key pair like this:

public static Tuple<string, string> CreateKeyPair()
{
    CspParameters cspParams = new CspParameters { ProviderType = 1 };

    RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider(1024, cspParams);

    string publicKey = Convert.ToBase64String(rsaProvider.ExportCspBlob(false));
    string privateKey = Convert.ToBase64String(rsaProvider.ExportCspBlob(true));

    return new Tuple<string, string>(privateKey, publicKey);
}

You can then use your public key to encrypt a message like so:

public static byte[] Encrypt(string publicKey, string data)
{
    CspParameters cspParams = new CspParameters { ProviderType = 1 };
    RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider(cspParams);

    rsaProvider.ImportCspBlob(Convert.FromBase64String(publicKey));

    byte[] plainBytes = Encoding.UTF8.GetBytes(data);
    byte[] encryptedBytes = rsaProvider.Encrypt(plainBytes, false);

    return encryptedBytes;
}

And use your private key to decrypt like this:

public static string Decrypt(string privateKey, byte[] encryptedBytes)
{
    CspParameters cspParams = new CspParameters { ProviderType = 1 };
    RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider(cspParams);

    rsaProvider.ImportCspBlob(Convert.FromBase64String(privateKey));

    byte[] plainBytes = rsaProvider.Decrypt(encryptedBytes, false);

    string plainText = Encoding.UTF8.GetString(plainBytes, 0, plainBytes.Length);

    return plainText;
}
like image 59
dcastro Avatar answered Sep 21 '22 01:09

dcastro


I think you are mixing things up. AES is a symmetric cipher, thus only have one key both for encryption and decryption. Asymmetric ciphers like RSA have two keys. A public key for encryption and a private key for decryption.

And for reddit, you can indeed answer without being logged in.

like image 23
user2787670 Avatar answered Sep 19 '22 01:09

user2787670