#region Symemetrically Encrypting Data and Decrypting Data
//
#region Encrypt and Decrypt using AesManaged Class
//
#region Create an Rfc2898DeriveBytes object passing password and salt into constructor
//
string password = "Pa$$w0rd";
//byte[] salt = "S@lt";//new byte[] { 'S', '@', 'l', 't', '1', '0', '7', '8' }; // this is where it has gone wrong convert to byte array
var salt = "S@lt";
var rfcDerBytes = new Rfc2898DeriveBytes(password, Encoding.Unicode.GetBytes(salt)); //Encoding.UTF8.GetBytes(salt));//Encoding.Unicode.GetBytes(salt));
//
#endregion Create an Rfc2898DeriveBytes object passing password and salt into constructor
//
#region Create Instance of AesManaged class ( encryption class )
AesManaged aesManAlgorithm = new AesManaged();
#endregion Create Instance of AesManaged class ( encryption class )
//
#region Generate Secret Key and IV from Rfc2898DeriveBytes object using algoirthm's key size
//
byte[] rfcDevBytesKey = rfcDerBytes.GetBytes(aesManAlgorithm.KeySize / 8); // aesManAlg.Key check...
//
#region foreach to check what's in the key // commented out
//Console.WriteLine("===================RgbKey====================");
//foreach (var item in rfcDevBytesKey)
//{
// Console.Write("{0}, ",item);
//}
//Console.WriteLine();
#endregion foreach to check what's in the key
//
byte[] rfcDevcBytesIv = rfcDerBytes.GetBytes(aesManAlgorithm.BlockSize / 8); // should be byte[] as per demo
//
#region foreach to check what's in the IV // commented out
//Console.WriteLine("===================RgbIV====================");
//foreach (var item in rfcDevcBytesIv)
//{
// Console.Write("{0}, ",item);
//}
//Console.WriteLine();
#endregion foreach to check what's in the IV
//
#endregion Generate Secret Key and IV from Rfc2898DeriveBytes object using algoirthm's key size
//
#region Create MemoryStream object ( instance of ) used to buffer encrypted or unencrypted bytes
//
MemoryStream memStream = new MemoryStream();
//
#endregion Create MemoryStream object ( instance of ) used to buffer encrypted or unencrypted bytes
//
#region Create Encryptor and Decryptor objects, accepting the secret key and IV as parameters
// create encryptor object
// var algorithmEncrypt = aesManAlgorithm.CreateEncryptor(rgbKey, rgbIv);
ICryptoTransform transformer = aesManAlgorithm.CreateEncryptor(rfcDevBytesKey, rfcDevcBytesIv);
//
#region Create Decryptor when need to decrypt not now book shows 2 different instances
// create decryptor object
// var algorithmDecrypt = aesManAlgorithm.CreateDecryptor(rgbKey, rgbIv);
// algorithm = aesManAlgorithm.CreateDecryptor(rfcDevBytesKey, rfcDevcBytesIv);
#endregion
//
#endregion Create Encryptor and Decryptor objects, accepting the secret key and IV as parameters
//
#region Create CryptoStream object ( instance ) passing bufferStream object, algorithm object and stream mode as parameters
//
var cryptoStream = new CryptoStream(memStream, transformer, CryptoStreamMode.Write);
//
#endregion Create CryptoStream object ( instance ) passing bufferStream object, algorithm object and stream mode as parameters
//
#region Invoke Write and FlushFinalBlock methods on CryptoStream object
//
try
{
var emailAddr = "etpienaa";
var emailAddrByteArr = Encoding.UTF8.GetBytes(emailAddr);//Encoding.Unicode.GetBytes(emailAddr);
#region Attempts at trying to convert to byte array commented out
//byte[] emailAddrByteArr = new byte[emailAddr.Length];
//string[] emailAddStArr = new string[]{"e","t","p","i","e","n","a","a","r","@","y","a","h","o","o",".","c","o","m"};
//string[] emailAddStArr = new string[emailAddr.Length];
//char[] emailCharArr = emailAddr.ToCharArray();
//for (int i = 0; i < emailAddr.Length; i++)
//{
// //Console.WriteLine(emailCharArr[i]);
// Console.WriteLine(emailAddStArr[i]);
// emailAddrByteArr[i] = byte.Parse(emailAddStArr[i]);
//}
//Encoding.Unicode.GetBytes()
//emailAddrByteArr = Array.ConvertAll(emailAddStArr, s => Convert.ToByte(s, 8));
//emailAddrByteArr = Encoding.ASCII.GetBytes(emailAddr);
//Encoding srcEncoding = Encoding.Unicode;
//Encoding dstEncoding = Encoding.UTF8;
//emailAddrByteArr = Encoding.Convert(srcEncoding,dstEncoding,emailAddrByteArr);
#endregion Attempts at trying to convert to byte array
#region Other attempts to provide a correct result commented out
//emailAddrByteArr = emailAddStArr.Select(s => byte.Parse(s)).ToArray();
//emailAddrByteArr = emailAddStArr.Select(s => Byte.Parse(s)).ToArray();
//emailAddrByteArr = Array.ConvertAll(emailAddStArr, s => Byte.Parse(s, NumberStyles.HexNumber));
//for (int j = 0; j < emailAddr.Length; j++)
//{
// emailAddrByteArr[j] = Convert.ToByte(emailAddStArr[j],2);
//}
//for (int i = 0; i < emailAddr.Length; i++)
//{
// emailAddStArr[i] = emailAddr[i].ToString();
//}
//for (int k = 0; k < emailCharArr.Length; k++)
//{
// emailAddStArr[k] = emailCharArr[k].ToString();
//}
//for (int m = 0; m < emailAddStArr.Length; m++)
//{
// // emailAddrByteArr[m] = byte.Parse(emailAddStArr[m].ToString(), NumberStyles.Any); // // doesn't work
// emailAddrByteArr[m] = byte.Parse(emailAddStArr[m], NumberStyles.Any);
// //emailAddrByteArr[m] = emailAddStArr[m];
// //emailAddrByteArr[m] = byte.Parse(emailCharArr[m].ToString(),NumberStyles.HexNumber);
//}
//int j = 0;
//foreach (var item in emailAddStArr)
//{
// emailAddrByteArr[j++] = byte.Parse(item);
//}
//for (int l = 0; l < emailAddStArr.Length; l++)
//{
// emailAddrByteArr[l] = byte.Parse(emailAddStArr[l]);
//} // does not work either!!
//DeveloperInfo devInfo = new DeveloperInfo(emailAddrByteArr, 1);
//foreach (var item in emailAddrByteArr)
//{
// Console.WriteLine(item);
//}
//var bytesToTransform = devInfo.EmailAddress;
#endregion Other attempts to provide a correct result
byte[] bytesToTransform = emailAddrByteArr;
cryptoStream.Write(bytesToTransform, 0, bytesToTransform.Length);
cryptoStream.FlushFinalBlock();
byte[] transformedBytes = memStream.ToArray();
#region Invoke Close Method on CryptoStream and MemoryStream objects
cryptoStream.Close();
memStream.Close();
for (int i = 0; i < transformedBytes.Length; i++)
{
Console.WriteLine(transformedBytes[i]);
}
#endregion Invoke Close Method on CryptoStream and MemoryStream objects
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}