/// <summary>Generates a hash for the given plain text value and returns a base64-encoded result.</summary>
        /// <param name="salt">The text to use as a salt.</param>
        /// <param name="textToHash">Plaintext value to be hashed.</param>
        /// <param name="hashAlgorithm">The algorithm to use.</param>
        public static string ComputeHash(string salt, string textToHash = null, CryptographyHash hashAlgorithm = CryptographyHash.SHA512)
        {
            HashAlgorithm hash;
              switch (hashAlgorithm)
              {
            case CryptographyHash.SHA1:
              hash = new SHA1Managed();
              break;
            case CryptographyHash.SHA256:
              hash = new SHA256Managed();
              break;
            case CryptographyHash.SHA384:
              hash = new SHA384Managed();
              break;
            case CryptographyHash.SHA512:
              hash = new SHA512Managed();
              break;
            default:
              throw new InvalidOptionException(typeof(CryptographyHash), hashAlgorithm);
              }

              byte[] hashBytes = hash.ComputeHash(SaltStringForHash(salt, textToHash));
              return Convert.ToBase64String(hashBytes);
        }
 /// <summary>Compares a hash of the specified plain text value to a given hash value.</summary>
 /// <param name="textToHash">Plain text to be verified against the specified hash.</param>
 /// <param name="hashAlgorithm">The algorithm to use.</param>
 /// <param name="compareHash">Base64-encoded hash value produced by ComputeHash function.</param>
 /// <param name="salt">Salt text. This parameter can be null, in which case no salt will be used.</param>
 public static MethodStatus VerifyHash(string salt, string textToHash, CryptographyHash hashAlgorithm, string compareHash)
 {
     if (compareHash == ComputeHash(salt, textToHash, hashAlgorithm))
     return MethodStatus.Pass;
       else
     return MethodStatus.Fail;
 }
 /// <summary>
 /// Gets a Hash for a file
 /// </summary>
 /// <param name="fileName">The name of the file to compute the hash for.</param>
 /// <param name="hashAlgorithm">The hash algorithm to use for this computation.</param>
 /// <returns>The hash for the file.</returns>
 public static string GetHashFromFile(string fileName, CryptographyHash hashAlgorithm = CryptographyHash.SHA512)
 {
     if (File.Exists(fileName))
     return ComputeHash(String.Empty, File.ReadAllText(fileName), hashAlgorithm);
       else
     return String.Empty;
 }