zoukankan      html  css  js  c++  java
  • c#3des,base64加密

    using System;
    using System.Security.Cryptography;
    using System.Web.Security;
    using System.IO;
    using System.Text;


    /// <summary>
    /// CryptTo 实现加密、解密算法
    /// </summary>
    public class CryptTo
    {
        /// <summary>
        /// 根据任意字符生成Des密钥
        /// </summary>
        /// <param name="secret">生成密钥的种子字</param>
        /// <returns>返回合格的Des密钥</returns>
        public static byte[] CreateKey(string secret)
        {
            if ((secret == null) || (secret.Length == 0))
                throw new ArgumentException("Secret is not valid");

            byte[] temp;

            temp = Hash(new ASCIIEncoding().GetBytes(secret));

            byte[] ret = new byte[24];

            int i;

            if (temp.Length < 24)
            {
                System.Array.Copy(temp, 0, ret, 0, temp.Length);
                for (i = temp.Length; i < 24; i++)
                    ret[i] = 0;
            }
            else
                System.Array.Copy(temp, 0, ret, 0, 24);

            return ret;
        }

        /// <summary>
        /// 根据任意字符生成Des密钥
        /// </summary>
        /// <param name="secret">生成密钥的种子字</param>
        /// <returns>返回合格的Des密钥</returns>
        public static string GenerateKey(string secret)
        {
            return Convert.ToBase64String(CreateKey(secret));
        }

        /// <summary>
        /// 随机生成Des密钥
        /// </summary>
        /// <returns>返回合格的Des密钥</returns>
        public static string GenerateKey()
        {
            string ret;
            TripleDESCryptoServiceProvider TDES = new TripleDESCryptoServiceProvider();

            TDES.GenerateKey();
            ret = Convert.ToBase64String(TDES.Key);

            return (ret);
        }

        /// <summary>
        /// 使用TripledDES加密
        /// </summary>
        /// <param name="content">要加密的内容</param>
        /// <param name="secret">密钥</param>
        /// <returns>加密后的结果</returns>
        public static string Encrypt(string content, string secret)
        {
            if ((content == null) || (secret == null) || (content.Length == 0) || (secret.Length == 0))
                throw new ArgumentNullException("Invalid Argument");

            try
            {
                byte[] Key = Convert.FromBase64String(secret);
                byte[] ContentByte = Encoding.Unicode.GetBytes(content);
                byte[] ContentCryptByte = Encrypt(ContentByte, Key);

                return Convert.ToBase64String(ContentCryptByte);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        /// <summary>
        /// 使用TripledDES解密
        /// </summary>
        /// <param name="content">要解密的内容</param>
        /// <param name="secret">密钥</param>
        /// <returns>解密后的结果</returns>
        public static string Decrypt(string content, string secret)
        {
            if ((content == null) || (secret == null) || (content.Length == 0) || (secret.Length == 0))
                throw new ArgumentNullException("Invalid Argument");

            try
            {
                byte[] Key = Convert.FromBase64String(secret);
                byte[] CryByte = Convert.FromBase64String(content);
                byte[] DecByte = Decrypt(CryByte, Key);

                return Encoding.Unicode.GetString(DecByte);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        /// <summary>
        /// 使用TripledDES加密
        /// </summary>
        /// <param name="source">要加密的内容</param>
        /// <param name="key">密钥</param>
        /// <returns>加密后的结果</returns>
        public static byte[] Encrypt(byte[] source, byte[] key)
        {
            if ((source.Length == 0) || (source == null) || (key == null) || (key.Length == 0))
            {
                throw new ArgumentException("Invalid Argument");
            }

            TripleDESCryptoServiceProvider dsp = new TripleDESCryptoServiceProvider();
            dsp.Mode = CipherMode.ECB;

            ICryptoTransform des = dsp.CreateEncryptor(key, null);

            try
            {
                return des.TransformFinalBlock(source, 0, source.Length);
            }
            catch (Exception e1)
            {
                throw e1;
            }
        }

        /// <summary>
        /// 使用TripledDES解密
        /// </summary>
        /// <param name="source">要解密的内容</param>
        /// <param name="key">密钥</param>
        /// <returns>解密后的结果</returns>
        public static byte[] Decrypt(byte[] source, byte[] key)
        {
            if ((source.Length == 0) || (source == null) || (key == null) || (key.Length == 0))
            {
                throw new ArgumentNullException("Invalid Argument");
            }

            TripleDESCryptoServiceProvider dsp = new TripleDESCryptoServiceProvider();
            dsp.Mode = CipherMode.ECB;

            ICryptoTransform des = dsp.CreateDecryptor(key, null);
            try
            {
                byte[] ret = new byte[source.Length + 8];

                des.TransformBlock(source, 0, source.Length, ret, 0);
                ret = des.TransformFinalBlock(source, 0, source.Length);
                ret = des.TransformFinalBlock(source, 0, source.Length);
                return ret;
            }
            catch (Exception e1)
            {
                throw e1;
            }
        }


        /// <summary>
        /// 使用md5计算散列
        /// </summary>
        /// <param name="source">要加密的内容</param>
        /// <returns>加密后的结果</returns>
        public static byte[] Hash(byte[] source)
        {
            if ((source == null) || (source.Length == 0))
                throw new ArgumentException("source is not valid");

            MD5 m = MD5.Create();
            return m.ComputeHash(source);
        }

        /// <summary>
        /// 使用md5计算散列
        /// </summary>
        /// <param name="source">要加密的内容</param>
        /// <returns>加密后的结果</returns>
        public static string Hash(string source)
        {
            // 两者的执行相同
            // return BitConverter.ToString(Hash(Encoding.ASCII.GetBytes(source)));

            return FormsAuthentication.HashPasswordForStoringInConfigFile(source, "md5");
        }

        /// <summary>
        /// 原始base64编码
        /// </summary>
        /// <param name="source"></param>
        /// <returns></returns>
        public static byte[] Base64Encode(byte[] source)
        {
            if ((source == null) || (source.Length == 0))
                throw new ArgumentException("source is not valid");

            ToBase64Transform tb64 = new ToBase64Transform();
            MemoryStream stm = new MemoryStream();
            int pos = 0;
            byte[] buff;

            while (pos + 3 < source.Length)
            {
                buff = tb64.TransformFinalBlock(source, pos, 3);
                stm.Write(buff, 0, buff.Length);
                pos += 3;
            }

            buff = tb64.TransformFinalBlock(source, pos, source.Length - pos);
            stm.Write(buff, 0, buff.Length);

            return stm.ToArray();

        }

        /// <summary>
        /// 原始base64解码
        /// </summary>
        /// <param name="source"></param>
        /// <returns></returns>
        public static byte[] Base64Decode(byte[] source)
        {
            if ((source == null) || (source.Length == 0))
                throw new ArgumentException("source is not valid");

            FromBase64Transform fb64 = new FromBase64Transform();
            MemoryStream stm = new MemoryStream();
            int pos = 0;
            byte[] buff;

            while (pos + 4 < source.Length)
            {
                buff = fb64.TransformFinalBlock(source, pos, 4);
                stm.Write(buff, 0, buff.Length);
                pos += 4;
            }

            buff = fb64.TransformFinalBlock(source, pos, source.Length - pos);
            stm.Write(buff, 0, buff.Length);
            return stm.ToArray();

        }

        public static string ToBase64(string source)
        {
            return Convert.ToBase64String(Encoding.Unicode.GetBytes(source));
        }

        public static string FromBase64(string source)
        {
            return Encoding.Unicode.GetString(Convert.FromBase64String(source));
        }
    }

    本文使用Blog_Backup未注册版本导出,请到soft.pt42.com注册。

  • 相关阅读:
    ADO.NET 之 二 yz
    ADO.NET 之 三 yz
    telerik的RadAutoCompleteBox控件学习完结 yz
    ADO.NET 之 三 2 yz
    ASP.NET 底层技术 一 yz
    telerik的RadAutoCompleteBox控件学习三 yz
    ASP.NET 之 自定义 异步HTTP处理程序 yz
    javascriptArray类型 二 yz
    telerik的RadAutoCompleteBox控件学习一 yz
    javascript——Array类型 yz
  • 原文地址:https://www.cnblogs.com/zjypp/p/2319428.html
Copyright © 2011-2022 走看看