Asymmetric Cryptography (Public Key Cryptography) - Part I

Asymmetric cryptography, also known as public key cryptography, it uses two distinct, yet related keys. One key, the Public Key, is used for encryption and the other, the Private Key, is for decryption.

Let say Mahesh wants to send an encrypted message to Shalini, Mahesh will look for Shalini Public key and use it for encrypt the message before sending it. Then Shalini Can decrypt the message using her related private key.

if Mahesh encrypts the message using his private key, then the message can be decrypted only using Shalini's public key, thus it will also authenticate Shalini. These encryption and decryption processes happen automatically hence no need to share the keys.

Asymmetric cryptography is slower then symmetric cryptography

Advantages:
1. Does not require to share key
2. Simple structure

RSA is common asymmetric algorithm, I will use the same for this example. To demonstrate, I have used .Net framework in build library “System.Security.Cryptography”.


using System;
using System.Security.Cryptography;
using System.Text;
namespace AsymmetricCryptography
{
public class AsymmetricRsa
{
static void Main()
{
var rsaCryptoService = new RSACryptoServiceProvider();
var publicKey = rsaCryptoService.ToXmlString(false); // false to get the public key
var privateKey = rsaCryptoService.ToXmlString(true); // true to get the private key
Console.WriteLine("Enter message to encrypt");
var message = Console.ReadLine();
var encryptedMessage = EncryptMessage(publicKey, message, rsaCryptoService);
Console.WriteLine(new UnicodeEncoding().GetString(encryptedMessage));
var decryptData = DecryptData(privateKey,encryptedMessage);
Console.WriteLine(new UnicodeEncoding().GetString(decryptData));
Console.ReadLine();
}
static byte[] EncryptMessage(string publicKey, string message, RSACryptoServiceProvider rsaCryptoService)
{
var dataToEncrypt = new UnicodeEncoding().GetBytes(message);
rsaCryptoService.FromXmlString(publicKey);//We can even create new instance for RSACryptoServiceProvider
return rsaCryptoService.Encrypt(dataToEncrypt, false);
}
static byte[] DecryptData(string privateKey, byte[] dataToDecrypt)
{
var rsaCryptoService = new RSACryptoServiceProvider(); //a new instance for receiver;
rsaCryptoService.FromXmlString(privateKey);
return rsaCryptoService.Decrypt(dataToDecrypt, false);
}
}
}

Comments

Popular posts from this blog

SHA-256(Source Code in C# using .Net in-built Cryptography library) - Part II

Basic of Cryptography (Type of Cryptography)- Part II