Results 1 to 3 of 3

Thread: Encrypt / Unencrypt string (for password etc)

Threaded View

  1. #1

    Thread Starter
    PowerPoster
    Join Date
    Jul 2002
    Location
    Dublin, Ireland
    Posts
    2,148

    Encrypt / Unencrypt string (for password etc)

    Code:
        public class EncryptUtility
        {
    
            // Encryption/Decryption
            private static System.Security.Cryptography.TripleDESCryptoServiceProvider tdes = null;
            private static System.Security.Cryptography.ICryptoTransform _encryptor;
            private static System.Security.Cryptography.ICryptoTransform _decryptor;
    
            private static byte[] _key = new byte[] { 162, 35, 204, 42, 81, 158, 34, 101, 115, 86, 201, 94, 113, 42, 7, 74, 35, 166, 225, 202, 216, 159, 127, 93 };
            private static byte[] _iv = new byte[] { 176, 158, 98, 232, 230, 189, 210, 90 };
    
    
            #region Encryption/decription code
            /// <summary>
            /// Encrypts a password using the given key
            /// </summary>
            /// <param name="clearPassword">
            /// The password to encrypt
            /// </param>
            /// <param name="key">
            /// The key phrase as an ascii string
            /// </param>
            /// <returns>
            /// An encrypted version of the password 
            /// </returns>
            public static string EncryptPassword(string clearPassword, string key)
            {
                // Convert the passphrase to a set of bytes that fits the requirement
                byte[] _putativeKey = Convert.FromBase64String(Convert.ToBase64String(System.Text.UnicodeEncoding.Unicode.GetBytes(key)  ));
                byte[] _newKey = new byte[_key.Length];
    
    
    
                for (int i = 0; i < _newKey.Length  ; i++)
                {
                    if (i < _putativeKey.Length)
                    {
                        _newKey[i] = _putativeKey[i];
                    }
                    else
                    {
                        _newKey[i] = _key[i];
                    }
                }
    
                return EncryptPassword(clearPassword, _newKey);
    
            }
    
            /// <summary>
            /// Encrypts the given clear text password with the given key
            /// </summary>
            /// <param name="clearPassword">
            /// The password to encrypt
            /// </param>
            /// <param name="key">
            /// The key to use to encrypt the password
            /// </param>
            /// <returns>
            /// An encrypted ascii string to store the password
            /// </returns>
            public static string EncryptPassword(string clearPassword, byte[] key)
            {
    
                EncryptUtility.EncryptionKey = key;
    
                if (null != _encryptor)
                {
                    System.IO.MemoryStream msTarget = new System.IO.MemoryStream(1024);
    
                    System.Security.Cryptography.CryptoStream csTarget = new System.Security.Cryptography.CryptoStream(msTarget  , _encryptor, System.Security.Cryptography.CryptoStreamMode.Write);
                    byte[] _clearPassword = System.Text.UnicodeEncoding.Unicode.GetBytes(clearPassword );
                    csTarget.Write(_clearPassword  , 0 , _clearPassword.Length );
                    csTarget.FlushFinalBlock(); 
    
                    // The in-memory stream now holds the encrypted password
                    msTarget.Seek(0, System.IO.SeekOrigin.Begin);
    
                    byte[] encrypted = msTarget.ToArray();
                    return Convert.ToBase64String(encrypted);
    
                }
                else
                {
                    throw new ApplicationException(@"Invalid encryption key - cannot encrypt password");
                }
    
    
            }
    
    
            /// <summary>
            /// Encrypts the given clear text password with the default key
            /// </summary>
            /// <param name="clearPassword">
            /// The password to encrypt
            /// </param>
            /// <param name="key">
            /// The key to use to encrypt the password
            /// </param>
            /// <returns>
            /// An encrypted ascii string to store the password
            /// </returns>
            public static string EncryptPassword(string clearPassword)
            {
                return EncryptPassword(clearPassword, EncryptUtility._key); 
            }
    
            /// <summary>
            /// Decrypts a password using the given pass phrase
            /// </summary>
            /// <param name="encryptedPassword">
            /// The encrypted password to decrypt
            /// </param>
            /// <param name="key">
            /// The passphrase to use to generate the encryption key
            /// </param>
            /// <returns></returns>
            public static string DecryptPassword(string encryptedPassword, string key)
            {
                // Convert the passphrase to a set of bytes that fits the requirement
                byte[] _putativeKey = Convert.FromBase64String(Convert.ToBase64String(System.Text.UnicodeEncoding.Unicode.GetBytes(key)));
                byte[] _newKey = new byte[_key.Length];
    
    
    
                for (int i = 0; i < _newKey.Length; i++)
                {
                    if (i < _putativeKey.Length)
                    {
                        _newKey[i] = _putativeKey[i];
                    }
                    else
                    {
                        _newKey[i] = _key[i];
                    }
                }
    
                return DecryptPassword(encryptedPassword, _newKey);
            }
    
            /// <summary>
            /// Un-encrypt the given encrypted password using the given key
            /// </summary>
            /// <param name="encryptedPassword">
            /// The encrypted password to un-encrypt
            /// </param>
            /// <param name="key">
            /// The key used in the encryption
            /// </param>
            /// <returns></returns>
            public static string DecryptPassword(string encryptedPassword, byte[] key)
            {
                EncryptUtility.EncryptionKey = key;
    
                if (null != _decryptor)
                {
                    System.IO.MemoryStream msTarget = new System.IO.MemoryStream(1024);
    
                    // Put the encrypted password in the memory stream..
                    byte[] _encyptedPassword = Convert.FromBase64String(encryptedPassword);
                    msTarget.Write(_encyptedPassword, 0, _encyptedPassword.Length );
    
                    // Create a decryption reader
                    System.Security.Cryptography.CryptoStream csTarget = new System.Security.Cryptography.CryptoStream(msTarget, _decryptor , System.Security.Cryptography.CryptoStreamMode.Read);
    
                    msTarget.Seek(0, System.IO.SeekOrigin.Begin); 
                    System.IO.StreamReader srOut = new System.IO.StreamReader(csTarget , System.Text.UnicodeEncoding.Unicode);
                    //csTarget.FlushFinalBlock();
    
                    // Return what we have written to the stream
                    return srOut.ReadToEnd();
                }
                else
                {
                    throw new ApplicationException(@"Invalid encryption key - cannot decrypt password");
                }
    
            }
    
            /// <summary>
            /// Un encrypt the given encrypted password using the default key
            /// </summary>
            /// <param name="encryptedPassword">
            /// The encrypted password to un-encrypt
            /// </param>
            /// <returns></returns>
            public static string DecryptPassword(string encryptedPassword)
            {
                return DecryptPassword(encryptedPassword, EncryptUtility._key);
            }
    
            /// <summary>
            /// Sets the array of bytes to use as the encryption key for encrypting
            /// or decrypting the file transfer passwords 
            /// </summary>
            public static byte[] EncryptionKey
            {
                set {
                    if ((null != value) && (value.Length > 0))
                    {
                        FileTransferDefinition._key = value;
                        if (null == tdes)
                        {
                            tdes = new System.Security.Cryptography.TripleDESCryptoServiceProvider();
                            tdes.IV = _iv;
                        }
    
                        // Set the new key
                        tdes.Key = EncryptUtility._key;
    
                        // and recreate the encryptor and decryptor
                        _encryptor = tdes.CreateEncryptor();
                        _decryptor = tdes.CreateDecryptor();
    
                    }
                }
            }
    
            #endregion
    
        }
    Last edited by Merrion; Feb 11th, 2010 at 04:56 PM. Reason: Oops - forgot to rename class references to EncryptUtility

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width