In the previous blog – [Cryptography : Symmetric Encryption by Symmetric Algorithm Classes – Part 1], we have learned about basic introduction of Cryptography, Symmetric Encryption, Symmetric Encryption Algorithm classes and codes for implementing DES class.
So, now, in addition to the previous blog, here we will learn about TripleDES
class, RC2 class and Rijndael class.
TripleDES Class
The TripleDES
class is an abstract
class that extends the SymmetricAlgorithm
class and provides support for the Triple Data Encryption Standard (Triple DES or TDES or TDEA) algorithm. TripleDES
is a method kind of using DES (Data Encryption Standard) to provide additional security. TripleDES
can be done by using two or three keys.
TripleDES
as its name implies increases encryption strength by applying the DES encryption algorithm to data three times before rendering to a result. Since the algorithm performs an encrypt-decrypt-encrypt sequence, this is sometimes called the EDE (Encryption Decryption Encryption) mode. TripleDES
algorithm supports an encryption key up to 168 bits (3*156) in size to 192 bits (Triple DES utilizes three 64-bit keys, 64*3 bits) in increments of 64 bits. Triple DES gives a relatively simple and awesome method of increasing the key size of DES (Data Encryption Standard) to protect against attacks.
The following code sample will guide you how to use and implement the TripleDESCryptoServiceProvider class.
Note: SourceCode
was almost the same as we have read in the previous article. Just implantation is different so keep focus on the implementation code.
To perform Encryption and Decryption, you must add:
using System.Security.Cryptography;
Now take a look at the encryption function:
public static byte[] Encrypt(string strText, SymmetricAlgorithm key)
{
MemoryStream ms = new MemoryStream();
CryptoStream crypstream = new CryptoStream(ms, key.CreateEncryptor(), CryptoStreamMode.Write);
StreamWriter sw = new StreamWriter(crypstream);
sw.WriteLine(strText);
sw.Close();
crypstream.Close();
byte[] buffer = ms.ToArray();
ms.Close();
return buffer;
}
In the above code, CreateEncryptor()
function is used to encrypt object with the current Key
property and initialization vector.
Now in the same way, we need to create function for Decrypt the PlainText (Encrypted Text). Have a look at the given function which is responsible to decrypt encrypted text.
public static string Decrypt(byte[] encryptText, SymmetricAlgorithm key)
{
MemoryStream ms = new MemoryStream(encryptText);
CryptoStream crypstream = new CryptoStream(ms, key.CreateDecryptor(), CryptoStreamMode.Read);
StreamReader sr = new StreamReader(crypstream);
string val = sr.ReadLine();
sr.Close();
crypstream.Close();
ms.Close();
return val;
}
In the above code, decryption is handled in the same way by using CreateDecryptor()
function instead of CreateEncryptor()
.
Now we have created function, so we can use both functions to appropriate manner to accomplishment of Encryption Decryption task.
Note: We need to access TripleDESCryptoServiceProvider class here.
TripleDESCryptoServiceProvider key = new TripleDESCryptoServiceProvider();
How to Use Encrypt Function
TripleDESCryptoServiceProvider key = new TripleDESCryptoServiceProvider();
byte[] buffer = Encrypt("ABC", key);
How to Use Decrypt Function
TripleDESCryptoServiceProvider key = new TripleDESCryptoServiceProvider();
byte[] buffer = Encrypt("ABC", key);
string strText = Decrypt(buffer, key);
RC2 Class
The RC2
class is an abstract
class that extends the Symmetric Algorithm class and provides support for the RC2 algorithm.
Ron Rivest is the one who discovered RC2, RC4, RC5, and RC6. Hence RC stands for Ron’s Codes. However, Lotus Software Company is the backend in creating the whole script of RC2 algorithm.
The RC2CryptoServiceProvider
object is a block cipher that encrypts and decrypts data in blocks of 8 bytes. This class pads the final block of data if it is less than 8 bytes. As a result of this padding, the length of encrypted data could be greater than the original plaintext.
The RC2 class provides the EffectiveKeySize
property, which is used to get or set the effective key size of the RC2 secret encryption key. An exception occurs whenever size is detected. The RC2CryptoServiceProvider class is the concrete RC2 algorithm class and it extends the RC2
class. The RC2CryptoServiceProvider class provides the UseSalt
property. The UseSalt
proeperty is set to false
by default. However, in any condition if this(usesalt)
property is set to True
, the encrypted value includes an 11-byte long 0 value salt.
Note: We need to access RC2CryptoServiceProvider
class here.
RC2CryptoServiceProvider key = new RC2CryptoServiceProvider();
The same Function of Encryption and Decryption which we used in previous Symmetric Encryption program. Just point to be noted to change the Symmetric class here which is RC2CryptoServiceProvider
for RC2 encryption.
How to Use Encrypt Function
RC2CryptoServiceProvider key = new RC2CryptoServiceProvider();
byte[] buffer = Encrypt("ABC", key);
How to Use Decrypt Function
RC2CryptoServiceProvider key = new RC2CryptoServiceProvider();
byte[] buffer = Encrypt("ABC", key);
string strText = Decrypt(buffer, key);
Rijndael Class
The Rijndael
class is an abstract
class that extends the SymmetricAlgorithm
class and provides support for the Rijndael algorithm. The algorithm of Rijndael encryption has been designed to replace the aging DES (Data Encryption Standard) algorithm. Like DES, it is a block cipher. It uses 128-bit, 192-bit or 256-bit keys. This implementation encrypts 128-bit blocks. (DES used 56-bit keys and 64-bit blocks.)
As we have read, it is considered to be the replacement for the DES algorithm and was adopted as a Federal Information Processing Standard(FIPS) standard in 2001. The RijndaelManaged class is a concrete class and it extends the Rijndael
class. The Rijndael
class is extended by CLR managed class, whereas the Symmetric encryption classes are extended by CSPs. The RijndaelManagedTransform
class is initialized by the CreateEncryptor
and CreateDecryptor
methods of the RijndaelManaged
class and is used in conjuction with the RijndaelMaaged
class to encrypt data.
In .NET Framework, Rijndael algorithm supports a fixed encryption key size of 128 bits, 192 bits, 192 bits or 256 bits as 9 rounds if the key/block size is 128 bits, 11 rounds if the key/block size is 192 bits and 13 rounds if the key/block size is 256 bits.
The Rijndael
class is the predecessor of the Aes algorithm. You should use the Aes algorithm instead of Rijndael.
Note: We need to access RijndaelManaged class here.
RijndaelManaged key = new RijndaelManaged();
The same Function of Encryption and Decryption which we used in previous Symmetric Encryption program. Just point to be noted to change the Symmetric class here which is RijndaelManaged for Rijndael encryption.
How to Use Encrypt Function
RijndaelManaged key = new RijndaelManaged();
byte[] buffer = Encrypt("ABC", key);
How to Use Decrypt Function
RijndaelManaged key = new RijndaelManaged();
byte[] buffer = Encrypt("ABC", key);
string strText = Decrypt(buffer, key);
Look at the below diagrams for output by using different Symmetric Algorithm applied on same plain text (e.g.: ABC)
Outcome of “ABC
” text Encryption by using TripleDES algo
Outcome of “ABC
” text Encryption by using RC2 Algo
Outcome of “ABC
” text Encryption by using Riijndael Algo
Further Reads
Filed under: .NET, C#, CodeProject