C#简单的加密类

public class EncryptHepler {
        // 验值 
        static string saltValue = "XXXX";
        // 密码值 
        static string pwdValue = "XXXX";

        /// <summary>
        /// 加密
        /// </summary>
        public static string Encrypt( string input ) {
            byte[ ] data = System.Text.UTF8Encoding.UTF8.GetBytes( input );
            byte[ ] salt = System.Text.UTF8Encoding.UTF8.GetBytes( saltValue );

            // AesManaged - 高级加密标准(AES) 对称算法的管理类 
            System.Security.Cryptography.AesManaged aes = new System.Security.Cryptography.AesManaged( );
            // Rfc2898DeriveBytes - 通过使用基于 HMACSHA1 的伪随机数生成器,实现基于密码的密钥派生功能 (PBKDF2 - 一种基于密码的密钥派生函数) 
            // 通过 密码 和 salt 派生密钥 
            System.Security.Cryptography.Rfc2898DeriveBytes rfc = new System.Security.Cryptography.Rfc2898DeriveBytes( pwdValue, salt );

            aes.BlockSize = aes.LegalBlockSizes[0].MaxSize;
            aes.KeySize = aes.LegalKeySizes[0].MaxSize;
            aes.Key = rfc.GetBytes( aes.KeySize / 8 );
            aes.IV = rfc.GetBytes( aes.BlockSize / 8 );

            // 用当前的 Key 属性和初始化向量 IV 创建对称加密器对象 
            System.Security.Cryptography.ICryptoTransform encryptTransform = aes.CreateEncryptor( );
            // 加密后的输出流 
            System.IO.MemoryStream encryptStream = new System.IO.MemoryStream( );
            // 将加密后的目标流(encryptStream)与加密转换(encryptTransform)相连接 
            System.Security.Cryptography.CryptoStream encryptor = new System.Security.Cryptography.CryptoStream
                ( encryptStream, encryptTransform, System.Security.Cryptography.CryptoStreamMode.Write );

            // 将一个字节序列写入当前 CryptoStream (完成加密的过程)
            encryptor.Write( data, 0, data.Length );
            encryptor.Close( );
            // 将加密后所得到的流转换成字节数组,再用Base64编码将其转换为字符串 
            string encryptedString = Convert.ToBase64String( encryptStream.ToArray( ) );
            return encryptedString;
        }
        /// <summary>
        /// 解密
        /// </summary>
        public static string Decrypt( string input ) {
            byte[ ] encryptBytes = Convert.FromBase64String( input );
            byte[ ] salt = Encoding.UTF8.GetBytes( saltValue );
            System.Security.Cryptography.AesManaged aes = new System.Security.Cryptography.AesManaged( );
            System.Security.Cryptography.Rfc2898DeriveBytes rfc = new System.Security.Cryptography.Rfc2898DeriveBytes( pwdValue, salt );

            aes.BlockSize = aes.LegalBlockSizes[0].MaxSize;
            aes.KeySize = aes.LegalKeySizes[0].MaxSize;
            aes.Key = rfc.GetBytes( aes.KeySize / 8 );
            aes.IV = rfc.GetBytes( aes.BlockSize / 8 );

            // 用当前的 Key 属性和初始化向量 IV 创建对称解密器对象 
            System.Security.Cryptography.ICryptoTransform decryptTransform = aes.CreateDecryptor( );
            // 解密后的输出流 
            System.IO.MemoryStream decryptStream = new System.IO.MemoryStream( );

            // 将解密后的目标流(decryptStream)与解密转换(decryptTransform)相连接 
            System.Security.Cryptography.CryptoStream decryptor = new System.Security.Cryptography.CryptoStream(
                decryptStream, decryptTransform, System.Security.Cryptography.CryptoStreamMode.Write );
            // 将一个字节序列写入当前 CryptoStream (完成解密的过程) 
            decryptor.Write( encryptBytes, 0, encryptBytes.Length );
            decryptor.Close( );

            // 将解密后所得到的流转换为字符串 
            byte[ ] decryptBytes = decryptStream.ToArray( );
            string decryptedString = UTF8Encoding.UTF8.GetString( decryptBytes, 0, decryptBytes.Length );
            return decryptedString;
        }
    }//class end
posted @ 2011-08-31 11:00  JerryT  阅读(1306)  评论(1编辑  收藏  举报