CasperHansen

Working AES

Apr 3rd, 2012
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.48 KB | None | 0 0
  1.         [Test]
  2.         public void EncryptDataAndDecryptData_TestDataIsCorrect()
  3.         {
  4.             AesCryptator aesCryptator = new AesCryptator();
  5.             string stringToEncrypt = "Hello World";
  6.             //Encrypt the string
  7.             string encryptedString = aesCryptator.EncryptData(stringToEncrypt);
  8.             //Decrypt the string
  9.             string decryptedString = aesCryptator.DecryptData(encryptedString);
  10.  
  11.             Assert.AreEqual(decryptedString, stringToEncrypt);
  12.         }
  13.  
  14. public static class CryptationUtility
  15.     {
  16.         public static string BytesToString(byte[] bytesToConvert)
  17.         {
  18.             return Encoding.ASCII.GetString(bytesToConvert);
  19.         }
  20.  
  21.         public static byte[] StringToBytes(string stringToConvert)
  22.         {
  23.             return Encoding.ASCII.GetBytes(stringToConvert);
  24.         }
  25.  
  26.         public static string ToUrlSafeBase64(byte[] input)
  27.         {
  28.             return Convert.ToBase64String(input).Replace("+", "-").Replace("/", "_");
  29.         }
  30.  
  31.         public static byte[] FromUrlSafeBase64(string input)
  32.         {
  33.             return Convert.FromBase64String(input.Replace("-", "+").Replace("_", "/"));
  34.         }
  35.     }
  36.  
  37. public class AesCryptator
  38.     {
  39.         private RijndaelManaged _rijndaelObj;
  40.  
  41.         public AesCryptator()
  42.         {
  43.             _rijndaelObj = new RijndaelManaged();
  44.         }
  45.  
  46.         public void SetRijndaelObject(RijndaelManaged rijndaelObj)
  47.         {
  48.             _rijndaelObj = rijndaelObj;
  49.         }
  50.  
  51.         public RijndaelManaged GetRijndaelObject()
  52.         {
  53.             return _rijndaelObj;
  54.         }
  55.  
  56.         public AesData GetAesData()
  57.         {
  58.             string key = Encoding.ASCII.GetString(_rijndaelObj.Key);
  59.             string iv = Encoding.ASCII.GetString(_rijndaelObj.IV);
  60.             return new AesData(key, iv);
  61.         }
  62.  
  63.         public string EncryptData(string str)
  64.         {
  65.             //Create a memory stream to hold the encrypted data
  66.             MemoryStream msEncrypt = new MemoryStream();
  67.  
  68.             try
  69.             {
  70.                 //Create a new instance of the CryptoStream class
  71.                 CryptoStream csEncrypt = new CryptoStream(msEncrypt, _rijndaelObj.CreateEncryptor(), CryptoStreamMode.Write);
  72.  
  73.                 //Create stream writer
  74.                 StreamWriter swEncrypt = new StreamWriter(csEncrypt);
  75.  
  76.                 //Encrypt the string
  77.                 swEncrypt.Write(str);
  78.  
  79.                 //Clean up. csEncrypt has to be closed before getting data from memorystream
  80.                 swEncrypt.Close();
  81.                 csEncrypt.Close();
  82.  
  83.                 //Convert encrypted data to string
  84.                 //string encryptedString = Convert.ToBase64String(ms.ToArray());
  85.                 string encryptedString = CryptationUtility.ToUrlSafeBase64(msEncrypt.ToArray());
  86.  
  87.                 //Clean up
  88.                 msEncrypt.Close();
  89.  
  90.                 //Return encrypted string
  91.                 return encryptedString;
  92.             }
  93.             catch (Exception ex)
  94.             {
  95.                 throw new AesCryptationException("Error in encrypting - " + ex.Message);
  96.             }
  97.         }
  98.  
  99.         public string DecryptData(string encryptedString)
  100.         {
  101.             try
  102.             {
  103.                 //Convert the encrypted string to a byte array
  104.                 //byte[] encryptedBytes = System.Convert.FromBase64String(encryptedString);
  105.                 byte[] encryptedBytes = CryptationUtility.FromUrlSafeBase64(encryptedString);
  106.  
  107.                 //Convert the byte array into a memory stream for decryption
  108.                 MemoryStream msDecrypt = new MemoryStream(encryptedBytes);
  109.  
  110.                 ////Create a new instance of the CryptoStream class
  111.                 CryptoStream csDecrypt = new CryptoStream(msDecrypt, _rijndaelObj.CreateDecryptor(), CryptoStreamMode.Read);
  112.  
  113.                 //Decrypt the stream
  114.                 StreamReader srDecrypt = new StreamReader(csDecrypt);
  115.  
  116.                 //Convert the decrypted stream into a string
  117.                 string decryptedString = srDecrypt.ReadToEnd();
  118.  
  119.                 //Clean up
  120.                 srDecrypt.Close();
  121.                 csDecrypt.Close();
  122.                 msDecrypt.Close();
  123.  
  124.                 //return decrypted string
  125.                 return decryptedString;
  126.             }
  127.             catch (Exception ex)
  128.             {
  129.                 throw new AesCryptationException("Error in decrypting - " + ex.Message);
  130.             }
  131.         }
  132.     }
Advertisement
Add Comment
Please, Sign In to add comment