public static string DecryptStringWith3DES(string data, string key, string iv)
{
UnicodeEncoding unicode = new UnicodeEncoding();
Byte[] Bytes = Convert.FromBase64String(data);
MemoryStream mem = new MemoryStream(100);
TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
Byte[] KeyBytes = unicode.GetBytes(key);
Byte[] tmpBytes = new Byte[16];
Array.Copy(KeyBytes, tmpBytes, KeyBytes.Length < 16 ? KeyBytes.Length : 16);
KeyBytes = tmpBytes;
if(tdes.ValidKeySize(KeyBytes.Length*8))
System.Diagnostics.Debug.WriteLine("Key size valid");
if(TripleDESCryptoServiceProvider.IsWeakKey(KeyBytes))
System.Diagnostics.Debug.WriteLine("Key weak");
CryptoStream CrStream = new CryptoStream(mem, tdes.CreateDecryptor(KeyBytes, unicode.GetBytes(iv)), CryptoStreamMode.Write);
for(int i = 0; i < Bytes.Length; i++)
CrStream.WriteByte(Bytes[i]);
CrStream.FlushFinalBlock();
string result = unicode.GetString(mem.GetBuffer(), 0, (int)mem.Length);
CrStream.Dispose();
return result;
}