title: C#, how to check if value is encrypted using MD5 passphrase?
body: <p>I have the following code to encrypt a value (listed below). Now I would like to write a bool isEncrypted() method. Is there a fool proof and reliable way to check if a value has been encrypted using this function. I have the decrypt routine and can control the pass phrase, but not sure if that will help. </p>
  
  <p>The reason is - when the app first runs, values in a configuration file are not encrypted, in this case the app should auto encrypt these values. On 2nd run I don't want to encrypt again because obviously that would cause havoc. Lastly I don't want to have to add an isEncrypted attribute to the config value. I want it to work and look as dynamic as possible. </p>
  
  <p>So far I am leaning towards using the len (128) as deciding factor, but there is always a remote chance of the unencrypted value also being this length. </p>
  
  <p>Thanks in advance.</p>
  
  <pre><code>public static string encrypt(string text)
      {
          // Locals
          var passphrase = "5ab394ed-3920-4932-8d70-9c1b08f4ba4e";
          byte[] results;
          var utf8 = new UTF8Encoding();
  
          // Step 1. We hash the passphrase using MD5
          // We use the MD5 hash generator as the result is a 128 bit byte array
          // which is a valid length for the TripleDES encoder we use below
          var hashProvider = new MD5CryptoServiceProvider();
          var tdesKey = hashProvider.ComputeHash(utf8.GetBytes(passphrase));
  
          // Step 2. Create a new TripleDESCryptoServiceProvider object
          // Step 3. Setup the encoder
          var tdesAlgorithm = new TripleDESCryptoServiceProvider
          {
              Key = tdesKey,
              Mode = CipherMode.ECB,
              Padding = PaddingMode.PKCS7
          };
  
          // Step 4. Convert the input string to a byte[]
          var dataToEncrypt = utf8.GetBytes(text);
  
          // Step 5. Attempt to encrypt the string
          try
          {
              var encryptor = tdesAlgorithm.CreateEncryptor();
              results = encryptor.TransformFinalBlock(dataToEncrypt, 0, dataToEncrypt.Length);
          }
          finally
          {
              // Clear the TripleDes and Hashprovider services of any sensitive information
              tdesAlgorithm.Clear();
              hashProvider.Clear();
          }
  
          // Step 6. Return the encrypted string as a base64 encoded string
          return Convert.ToBase64String(results);
      }
  </code></pre>