Some times you want to store some data into hidden fields and want to ensure that data is unreadable to humans but is only used by server side variables.
The easiest way it to utilize the RSACryptoServiceProvider class in System.Security.Cryptography.
Utilize the class shown below:
Please note that this works only for smaller strings. You may get an error: Bad Length for longer strings. For longer string we need to use hybrid encryption alogrithm.
To encrypt longer string use the code below:
The easiest way it to utilize the RSACryptoServiceProvider class in System.Security.Cryptography.
Utilize the class shown below:
using System.Security.Cryptography;
namespace SampleNamespace
{
public class EncryptDecrypt
{
static RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider(2048);
public EncryptDecrypt()
{
}
public static string Encrypt(string text)
{
return Convert.ToBase64String(rsaProvider.Encrypt(System.Text.Encoding.UTF8.GetBytes(text), true));
}
public static string Decrypt(string text)
{
return System.Text.Encoding.UTF8.GetString(rsaProvider.Decrypt(Convert.FromBase64String(text), true));
}
}
}
Please note that this works only for smaller strings. You may get an error: Bad Length for longer strings. For longer string we need to use hybrid encryption alogrithm.
To encrypt longer string use the code below:
using System.Security.Cryptography;
namespace SampleNamespace
{
/// This size of the IV (in bytes) must = (keysize / 8). Default keysize is 256, so the IV must be
/// 32 bytes long. Using a 16 character string here gives us 32 bytes when converted to a byte array.
private const string initVector = "E5IaHPeVT3Mvt5Lk";
/// This constant is used to determine the keysize of the encryption algorithm
private const int keysize = 256;
/// Passpharase to be used for encryption and decryption
private const string passPhrase = "QjM2vWxgat";
/// <summary>
/// Encrypts provided String
/// </summary>
/// <param name="plainText">Text to be encrypted</param>
/// <returns>Encrypted String</returns>
public static string EncryptString(string plainText)
{
byte[] initVectorBytes = Encoding.UTF8.GetBytes(initVector);
byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText);
PasswordDeriveBytes password = new PasswordDeriveBytes(passPhrase, null);
byte[] keyBytes = password.GetBytes(keysize / 8);
RijndaelManaged symmetricKey = new RijndaelManaged();
symmetricKey.Mode = CipherMode.CBC;
ICryptoTransform encryptor = symmetricKey.CreateEncryptor(keyBytes, initVectorBytes);
MemoryStream memoryStream = new MemoryStream();
CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write);
cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length);
cryptoStream.FlushFinalBlock();
byte[] cipherTextBytes = memoryStream.ToArray();
memoryStream.Close();
cryptoStream.Close();
return Convert.ToBase64String(cipherTextBytes);
}
/// <summary>
/// Decrypts provided String
/// </summary>
/// <param name="cipherText">Text to be decrypted</param>
/// <returns>Decrypted String</returns>
public static string DecryptString(string cipherText)
{
byte[] initVectorBytes = Encoding.UTF8.GetBytes(initVector);
byte[] cipherTextBytes = Convert.FromBase64String(cipherText);
PasswordDeriveBytes password = new PasswordDeriveBytes(passPhrase, null);
byte[] keyBytes = password.GetBytes(keysize / 8);
RijndaelManaged symmetricKey = new RijndaelManaged();
symmetricKey.Mode = CipherMode.CBC;
ICryptoTransform decryptor = symmetricKey.CreateDecryptor(keyBytes, initVectorBytes);
MemoryStream memoryStream = new MemoryStream(cipherTextBytes);
CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read);
byte[] plainTextBytes = new byte[cipherTextBytes.Length];
int decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);
memoryStream.Close();
cryptoStream.Close();
return Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount);
}
}
No comments:
Post a Comment