Here is one sample class which can be used for 4 different kind of symmetric encryption
1. DES
2. RC2
3. Rijndeal
4. TripleDES
Before using the class there is one important thing to know which is the size of the key. It varies as you change the encryption type for example
- DES support 64 bits.
- RC2 40 to 128 Bits with increment of 8 Bits only.
- Rijndeal support key lengths of 128, 192, or 256 bits.
- and TripleDES supports 128 bits to 192 bits in increments of 64 bits.
using System;
using System.IO;
using System.Text;
using System.Security.Cryptography;
namespace Crypto
{
public enum SymmetricAlgorimthType{ DES, RC2, Rijndael, TripleDES };
class SymmetricCryptogarphy
{
private SymmetricAlgorimthType _algorithmType =
SymmetricAlgorimthType.DES;
public SymmetricCryptogarphy(SymmetricAlgorimthType algorithmKey)
{
_algorithmType = algorithmKey;
}
public SymmetricAlgorimthType AlgorithmType
{
get { return _algorithmType; }
}
public SymmetricAlgorithm GenerateKey()
{
SymmetricAlgorithm algoKey;
algoKey = GetCryptoServiceProvider(_algorithmType);
algoKey.GenerateKey();
algoKey.GenerateIV();
return algoKey;
}
public SymmetricAlgorithm GenerateKey(int keySize)
{
SymmetricAlgorithm algoKey;
algoKey = GetCryptoServiceProvider(_algorithmType);
algoKey.KeySize = keySize;
algoKey.GenerateKey();
algoKey.GenerateIV();
return algoKey;
}
public SymmetricAlgorithm GenerateKey(int blockSize, int keySize)
{
SymmetricAlgorithm algoKey;
algoKey = GetCryptoServiceProvider(_algorithmType);
algoKey.BlockSize = blockSize;
algoKey.KeySize = keySize;
algoKey.GenerateKey();
algoKey.GenerateIV();
return algoKey;
}
public byte[] EncryptData(SymmetricAlgorithm key, string data)
{
MemoryStream memoryStream = new MemoryStream();
CryptoStream encStream = new CryptoStream(memoryStream,
key.CreateEncryptor(), CryptoStreamMode.Write);
StreamWriter sw = new StreamWriter(encStream);
sw.WriteLine(data);
sw.Close();
encStream.Close();
byte[] buffer = memoryStream.ToArray();
memoryStream.Close();
return buffer;
}
public string DecryptData(SymmetricAlgorithm key, byte[] data)
{
MemoryStream memoryStream = new MemoryStream(data);
CryptoStream encStream = new CryptoStream(memoryStream,
key.CreateDecryptor(),CryptoStreamMode.Read);
StreamReader sr = new StreamReader(encStream);
string val = sr.ReadLine();
sr.Close();
encStream.Close();
memoryStream.Close();
return val;
}
private SymmetricAlgorithm GetCryptoServiceProvider(SymmetricAlgorimthType algorithmType)
{
switch (algorithmType)
{
case SymmetricAlgorimthType.DES:
return new DESCryptoServiceProvider();
case SymmetricAlgorimthType.RC2:
return new RC2CryptoServiceProvider();
case SymmetricAlgorimthType.Rijndael:
return new RijndaelManaged();
case SymmetricAlgorimthType.TripleDES:
return new TripleDESCryptoServiceProvider();
default:
return new DESCryptoServiceProvider();
}
}
}
}
Image may be NSFW.
Clik here to view.
Clik here to view.
