title: C# encoding in DES encryption/decryption
body: <p>My main method runs without errors, but the decrypted message is not correct.  I'm almost certain I'm not properly encoding, but I can't nail down the problem.  Any help would be greatly appreciated.  </p>
  
  <p>This is my first post, so if I've inadvertently broken a rule or not adhered to a guideline, please let me know.</p>
  
  <pre><code>static void Main(string[] args)
  {
      string unencryptedString = "cat";
      string encryptedString;
      string decryptedString;
  
      string password = "password";
  
      System.Console.WriteLine("Unencrypted String: " + unencryptedString);
      System.Console.WriteLine("Password: " + password);
  
      encryptedString = StandardEncryptor.Encrypt(unencryptedString, password);
      System.Console.WriteLine("Encrypted String: " + encryptedString);
  
      decryptedString = StandardEncryptor.Decrypt(encryptedString, password);
      System.Console.WriteLine("Decrypted String: " + decryptedString);
  
      System.Console.ReadLine();
  }
  
  public static string Encrypt(string message, string password)
  {
      // Encode message and password
      byte[] messageBytes = ASCIIEncoding.ASCII.GetBytes(message);
      byte[] passwordBytes = ASCIIEncoding.ASCII.GetBytes(password);
  
      // Set encryption settings -- Use password for both key and init. vector
      DESCryptoServiceProvider provider = new DESCryptoServiceProvider();
      ICryptoTransform transform = provider.CreateEncryptor(passwordBytes, passwordBytes);
      CryptoStreamMode mode = CryptoStreamMode.Write;
  
      // Set up streams and encrypt
      MemoryStream memStream = new MemoryStream();
      CryptoStream cryptoStream = new CryptoStream(memStream, transform, mode);
      cryptoStream.Write(messageBytes, 0, messageBytes.Length);
      cryptoStream.FlushFinalBlock();
  
      // Read the encrypted message from the memory stream
      byte[] encryptedMessageBytes = new byte[memStream.Length];
      memStream.Position = 0;
      memStream.Read(encryptedMessageBytes, 0, encryptedMessageBytes.Length);
  
      // Encode the encrypted message as base64 string
      string encryptedMessage = Convert.ToBase64String(encryptedMessageBytes);
  
      return encryptedMessage; 
  }
  
  public static string Decrypt(string encryptedMessage, string password)
  {
      // Convert encrypted message and password to bytes
      byte[] encryptedMessageBytes = Convert.FromBase64String(encryptedMessage);
      byte[] passwordBytes = ASCIIEncoding.ASCII.GetBytes(password);
  
      // Set encryption settings -- Use password for both key and init. vector
      DESCryptoServiceProvider provider = new DESCryptoServiceProvider();
      ICryptoTransform transform = provider.CreateDecryptor(passwordBytes, passwordBytes);
      CryptoStreamMode mode = CryptoStreamMode.Write;
  
      // Set up streams and decrypt
      MemoryStream memStream = new MemoryStream();
      CryptoStream cryptoStream = new CryptoStream(memStream, transform, mode);
      cryptoStream.Write(encryptedMessageBytes, 0, encryptedMessageBytes.Length);
      cryptoStream.FlushFinalBlock();
  
      // Read decrypted message from memory stream
      byte[] decryptedMessageBytes = new byte[memStream.Length];
      memStream.Position = 0;
      memStream.Read(decryptedMessageBytes, 0, decryptedMessageBytes.Length);
  
      // Encode deencrypted binary data to base64 string
      string message = Convert.ToBase64String(decryptedMessageBytes);
  
      return message;
  }
  </code></pre>