C# 加密解密

MD5加密

* message-digest algorithm 5
* 单向加密,无法根据密文解密
* 对输入的任意长度字符串,都产生一个128位的整体
* using System.Security.Cryptography;

        /// <summary>
        /// 通过MD5算法,对指定字符串加密
        /// </summary>
        /// <param name="sPalin">指定明文</param>
        /// <returns>返回密文</returns>
        public string EncryptByMD5(string sPalin)
        {
            MD5 md5 = new MD5CryptoServiceProvider();
            byte[] palinData = Encoding.UTF8.GetBytes(sPalin); // 可以自定义 字符编码
            byte[] encryptData = md5.ComputeHash(palinData);   // 将输入字符串 加密
            string vStr = Convert.ToBase64String(encryptData); // 将加密后的字节数组转换位加密字符串

            return vStr; // 返回密文
        }

RSA加密、解密

* 非对称加密,加密和解密使用不同的密钥
* 目前最具影响力的公钥加密算法
* 生产密钥很麻烦,分组长度太大
* using System.Security.Cryptography;

 

        /// <summary>
        /// 通过RSA算法,对指定字符串加密
        /// </summary>
        /// <param name="sPalin">指定明文</param>
        /// <returns>返回密文</returns>
        public string EncryptByRSA(string sPalin)
        {
            CspParameters vParam = new CspParameters();
            vParam.KeyContainerName = "ch_dx_cuit";  // 密钥容器名称,与解密保持一致
            using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(vParam))
            {
                byte[] palinData = Encoding.UTF8.GetBytes(sPalin);
                byte[] encryptData = rsa.Encrypt(palinData, false);  // 加密
                string vStr = Convert.ToBase64String(encryptData);   // 将加密后的字节数组转换位加密字符串

                return vStr; // 返回密文
            }
        }

        /// <summary>
        /// 通过RSA算法,对指定密文解密
        /// </summary>
        /// <param name="sEncrypt">指定密文</param>
        /// <returns>返回明文</returns>
        public string DecryptByRSA(string sEncrypt)
        {
            CspParameters vParam = new CspParameters();
            vParam.KeyContainerName = "ch_dx_cuit";  // 密钥容器名称,与加密保持一致
            using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(vParam))
            {
                byte[] encryptData = Convert.FromBase64String(sEncrypt);
                byte[] decryptData = rsa.Decrypt(encryptData, false);
                string vStr = Encoding.UTF8.GetString(decryptData);

                return vStr; // 返回明文
            }
        }

DES加密、解密

* 对称加密算法,加密解密使用同一密钥,不安全
* 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小
* 使用 16 个循环,使用异或,置换,代换,移位操作

        /// <summary>
        /// 通过DES算法,对指定字符串加密
        /// </summary>
        /// <param name="sPalin">指定明文</param>
        /// <returns>返回密文</returns>
        public string EncryptByDES(string sPalin)
        {
            string sKey = "chdxcuit"; // 必须的,8位密钥。与解密保持一致
            using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
            {
                des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
                des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);

                byte[] palinData = Encoding.UTF8.GetBytes(sPalin);
                MemoryStream ms = new MemoryStream();
                using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
                {
                    cs.Write(palinData, 0, palinData.Length);
                    cs.FlushFinalBlock();
                    cs.Close();
                }
                string vStr = Convert.ToBase64String(ms.ToArray());
                ms.Close();

                return vStr; // 返回密文
            }
        }

        /// <summary>
        /// 通过DES算法,对指定密文解密
        /// </summary>
        /// <param name="sEncrypt">指定密文</param>
        /// <returns>返回明文</returns>
        public string DecryptByDES(string sEncrypt)
        {
            string sKey = "chdxcuit"; // 8位密钥,与加密保持一致
            using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
            {
                des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
                des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);

                byte[] encryptData = Convert.FromBase64String(sEncrypt);
                MemoryStream ms = new MemoryStream();
                using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
                {
                    cs.Write(encryptData, 0, encryptData.Length);
                    cs.FlushFinalBlock();
                    cs.Close();
                }
                string vStr = Encoding.UTF8.GetString(ms.ToArray());
                ms.Close();

                return vStr; // 返回明文
            }
        }

 

 

http://www.cnblogs.com/CUIT-DX037/

posted on 2017-05-04 11:57  云梦鸿  阅读(433)  评论(1编辑  收藏  举报