RSA Encryption and Decryption using Private and Public Key, client and server side
Here i used two approach
1. Server Side Encryption (using Public Key) and Server Side Decryption (using Private Key)
using System;
using System.Security.Cryptography;
using System.Text;
public partial class RSA_RSAEncDec : System.Web.UI.Page
{
string publicKey = "";
string privateKey = "";
/*
* Very Use full Site to develop this functionality
//https://raskeyconverter.azurewebsites.net/XmlToPem?handler=ConvertPEM
// For Encryption we user Private key PEM like below sample public key format i.e.
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhki....
-----END PUBLIC KEY-----
For Decryption we required XMl file hence generate using the PEM and result like this..
xpuS70fWBZv..... AQAB +m+08g5NTiFXrh5f0...
ywUa2jNho8BFlQobo.....
59OegfABWdD9tH4Dn7.... B1t1AKlSBYQnQ.... v4iZ7IpuX4yc.... YC5TWCHX2duUR0a.....
*/
protected void Page_Load(object sender, EventArgs e)
{
string PreFix = @"C:\Users\murdhusi\Downloads\Biometric (2)\Biometric\Murli\";
publicKey = System.IO.File.ReadAllText(PreFix + @"RSApublicKeyM.txt");
privateKey = System.IO.File.ReadAllText(PreFix + @"RSAprivateKeyM.txt");
}
protected void btnEncrypt_Click(object sender, EventArgs e)
{
txtencrypt.Text = GenerateKeyAndEncrypt();
}
protected void btnDecrypt_Click(object sender, EventArgs e)
{
txtdecrypt.Text = GetKeyandDecrypt(Convert.FromBase64String(txtencrypt.Text));
}
#region For Encryption
private string GenerateKeyAndEncrypt()
{
// Generate RSA key pair
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
// Convert the data to bytes
string data = txtplain.Text;// "Hello, RSA! MURLi";
//lblMessage.Text += ("
Orignal data: " + data);
byte[] dataBytes = Encoding.UTF8.GetBytes(data);
// Encrypt the data using the public key
byte[] encryptedData = EncryptData(dataBytes, publicKey);
string encData = Convert.ToBase64String(encryptedData);
// Store or transmit the encrypted data
//lblMessage.Text += ("
Encrypted data: " + encData);
return encData;
}
}
static byte[] EncryptData(byte[] dataBytes, string publicKey)
{
//if (true)
{
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
// Import the recipient's public key
rsa.FromXmlString(publicKey);
// Encrypt the data using the public key
byte[] encryptedData = rsa.Encrypt(dataBytes, true);
return encryptedData;
}
}
}
#endregion
#region For Decryption
private string GetKeyandDecrypt(byte[] encData)
{
string originalData = "";
string privateKeyXml = "";
// Retrieve the encrypted data
byte[] encryptedData = null; // Get the encrypted data
privateKeyXml = privateKey;
encryptedData = encData;
// Create an instance of RSACryptoServiceProvider
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
// Import the private key
rsa.FromXmlString(privateKeyXml);
// Decrypt the data using the private key
byte[] decryptedData = rsa.Decrypt(encryptedData, true);
// Convert the decrypted data back to its original form
originalData = Encoding.UTF8.GetString(decryptedData);
// Display the decrypted data
//lblMessage.Text += ("
Decrypted data: " + originalData);
}
return originalData;
}
#endregion
}2. Client Side Encryption (using Public Key) and Server Side Decryption (using Private Key)
<script src="https://cdn.jsdelivr.net/npm/jsencrypt@latest/bin/jsencrypt.min.js"></script>
<script src="js/jsencrypt.min.js"></script>
<!--Your custom script that uses JSEncrypt-->
<script type="text/javascript">
// Define the encryption function with a single parameter (the data to be encrypted).
function encrypt(data) {
//debugger;
var encrypt = new JSEncrypt(); // Create a new instance of the JSEncrypt library.
public_key = `-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w.....
-----END PUBLIC KEY-----`;
encrypt.setPublicKey(public_key); // Set the public key for the encryption library.
var encrypted = encrypt.encrypt(data); // Use the encrypt method of the library to encrypt the data.
//console.log("encrypted Text: ", encrypted);
return encrypted; // Return the encrypted data.
}
let encData = encrypt("Text for encryption");
</script>
Download Sample Code from here