`
javafan_303
  • 浏览: 958930 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

asp.net的DES加密和解密算法

 
阅读更多
/// <summary>
    /// DES(56位)
    /// DES算法为密码体制中的对称密码体制,又被成为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。
    /// 其密钥长度为56位,明文按64位进行分组,将分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。
    /// </summary>
    public class DES
    {

        #region 公用des
        /// <summary>
        /// 改变密钥向量
        /// </summary>
        public void ChangeKeys()
        {
            Keys = PuKeys;
        }
        /// <summary>
        /// 改变密钥向量
        /// </summary>
        /// <param name="keys">自定义向量</param>
        public void ChangeKeys(byte[] keys)
        {
            if (keys.Length != 8)
            {
                throw new Exception("必须是8 为的 byte");
            }
            Keys = keys;
        }
      


        //默认密钥向量
        static byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
        /// <summary>
        /// 自定义公共
        /// </summary>
        public static byte[] PuKeys = { 0x15, 0x1, 0x0, 0x78, 0x91, 0xAD, 0x1D, 0xCF };

        /// <summary>
        /// 默认密钥
        /// </summary>
        static string okey = "CMDKDCJC";
        /// <summary>
        /// DES加密字符串
        /// </summary>
        /// <param name="encryptString">待加密的字符串</param>
        /// <param name="encryptKey">加密密钥,要求为8位</param>
        public static string EncryptDES(string encryptString)
        {
            return EncryptDES(encryptString, okey);
        }
        /// <summary>
        /// DES加密字符串
        /// </summary>
        /// <param name="encryptString">待加密的字符串</param>
        /// <param name="encryptKey">加密密钥,要求为8位</param>
        /// <returns>加密成功返回加密后的字符串,失败返回源串</returns>
        public static string EncryptDES(string encryptString, string encryptKey)
        {
            try
            {
                byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
                byte[] rgbIV = Keys;
                byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
                DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
                MemoryStream mStream = new MemoryStream();
                CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey,

rgbIV), CryptoStreamMode.Write);
                cStream.Write(inputByteArray, 0, inputByteArray.Length);
                cStream.FlushFinalBlock();
                return Convert.ToBase64String(mStream.ToArray());
            }
            catch
            {
                return encryptString;
            }
        }

        /// <summary>
        /// DES解密字符串
        /// </summary>
        /// <param name="decryptString">待解密的字符串</param>
        /// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>
        /// <returns>解密成功返回解密后的字符串,失败返源串</returns>
        public static string DecryptDES(string decryptString)
        {
            return DecryptDES(decryptString, okey);
        }
        /// <summary>
        /// DES解密字符串
        /// </summary>
        /// <param name="decryptString">待解密的字符串</param>
        /// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>
        /// <returns>解密成功返回解密后的字符串,失败返源串</returns>
        public static string DecryptDES(string decryptString, string decryptKey)
        {
            try
            {
                byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey);
                byte[] rgbIV = Keys;
                byte[] inputByteArray = Convert.FromBase64String(decryptString);
                DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();
                MemoryStream mStream = new MemoryStream();
                CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey,

rgbIV), CryptoStreamMode.Write);
                cStream.Write(inputByteArray, 0, inputByteArray.Length);
                cStream.FlushFinalBlock();
                return Encoding.UTF8.GetString(mStream.ToArray());
            }
            catch
            {
                return decryptString;
            }
        }

        #endregion

        #region  
        /// <summary>
        ///  des解密方式
        /// </summary>
        /// <param name="mq">密文</param>
        /// <param name="Key">密钥</param>
        /// <param name="Vector"></param>
        /// <returns></returns>
        public static Byte[] Decrypt(String mq, String Key, String Vector)
        {

            Byte[] Data = Convert.FromBase64String(mq);
            Byte[] bKey = new Byte[8];
            bKey[0] = 82;
            bKey[1] = 82;
            bKey[2] = 79;
            bKey[3] = 70;
            bKey[4] = 79;
            bKey[5] = 84;
            bKey[6] = 79;
            bKey[7] = 69;

            Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)), bKey, bKey.Length);
            Byte[] bVector = new Byte[8];
            bVector = bKey;
            Array.Copy(Encoding.UTF8.GetBytes(Vector.PadRight(bVector.Length)), bVector, bVector.Length);
            Byte[] original = null;

            DESCryptoServiceProvider CryptoProvider = new DESCryptoServiceProvider();
            CryptoProvider.Mode = CipherMode.ECB;
            //CryptoProvider.Padding = PaddingMode.Zeros;

            try
            {

                // 开辟一块内存流,存储密文

                using (MemoryStream Memory = new MemoryStream(Data))
                {

                    // 把内存流对象包装成加密流对象

                    using (CryptoStream Decryptor = new CryptoStream(Memory,

                    CryptoProvider.CreateDecryptor(bKey, bVector),

                    CryptoStreamMode.Read))
                    {

                        // 明文存储区

                        using (MemoryStream originalMemory = new MemoryStream())
                        {

                            Byte[] Buffer = new Byte[1024];

                            Int32 readBytes = 0;

                            while ((readBytes = Decryptor.Read(Buffer, 0, Buffer.Length)) > 0)
                            {

                                originalMemory.Write(Buffer, 0, readBytes);

                            }

                            original = originalMemory.ToArray();

                        }
                    }
                }
            }

            catch(Exception e)
            {
                original = null;

            }
            return original;

        }


      

        /// <summary>
        ///  DES加密方法
        /// </summary>
        /// <param name="strPlain">明文</param>
        /// <param name="strDESKey">密钥</param>
        /// <param name="strDESIV">向量</param>
        /// <returns>密文</returns>
        public static string DESEncrypt(string strPlain, string strDESKey, string strDESIV)
        {

            Byte[] bytesDESKey = new Byte[8];
            bytesDESKey[0] = 82;
            bytesDESKey[1] = 82;
            bytesDESKey[2] = 79;
            bytesDESKey[3] = 70;
            bytesDESKey[4] = 79;
            bytesDESKey[5] = 84;
            bytesDESKey[6] = 79;
            bytesDESKey[7] = 69;
            Array.Copy(Encoding.UTF8.GetBytes(strDESKey.PadRight(bytesDESKey.Length)), bytesDESKey, bytesDESKey.Length);
            Byte[] bytesDESIV = new Byte[8];
            bytesDESIV = bytesDESKey;
            Array.Copy(Encoding.UTF8.GetBytes(strDESIV.PadRight(bytesDESIV.Length)), bytesDESIV, bytesDESIV.Length);


            //声明1个新的DES对象
            DESCryptoServiceProvider desEncrypt = new DESCryptoServiceProvider();
            desEncrypt.Mode = CipherMode.ECB;
            //desEncrypt.Padding = PaddingMode.Zeros;

            //开辟一块内存流
            MemoryStream msEncrypt = new MemoryStream();
            //把内存流对象包装成加密流对象
            CryptoStream csEncrypt = new CryptoStream(msEncrypt, desEncrypt.CreateEncryptor(bytesDESKey, bytesDESIV), CryptoStreamMode.Write);
            byte[] inputByteArray = Encoding.UTF8.GetBytes(strPlain);
            csEncrypt.Write(inputByteArray, 0, inputByteArray.Length);
            csEncrypt.FlushFinalBlock();
            return Convert.ToBase64String(msEncrypt.ToArray());
        }


        #endregion

        #region MD5
        /// <summary>
        /// MD5函数
        /// </summary>
        /// <param name="str">原始字符串</param>
        /// <returns>MD5结果</returns>
        public static string MD5(string str)
        {
            if (string.IsNullOrEmpty(str))
                return "";
            byte[] b = Encoding.Default.GetBytes(str);
            b = new MD5CryptoServiceProvider().ComputeHash(b);
            StringBuilder ret = new StringBuilder();
            for (int i = 0; i < b.Length; i++)
                ret.Append(b[i].ToString("x").PadLeft(2, '0'));
            return ret.ToString();
        }

        public static string GMD5(string message)
        {
            Byte[] clearBytes = new UnicodeEncoding().GetBytes(message);
            Byte[] hashedBytes = ((HashAlgorithm)CryptoConfig.CreateFromName("MD5")).ComputeHash(clearBytes);

            String tt = BitConverter.ToString(hashedBytes).Replace("-", "");
            // MessageBox.Show(tt.Length.ToString());
            return tt;

        }


        public static string ToGB2312(string str)
        {
            string r = "";
            System.Text.RegularExpressions.MatchCollection mc = System.Text.RegularExpressions.Regex.Matches(str, @"\\u([\w]{2})([\w]{2})", System.Text.RegularExpressions.RegexOptions.Compiled | System.Text.RegularExpressions.RegexOptions.IgnoreCase);
            byte[] bts = new byte[2];
            foreach (System.Text.RegularExpressions.Match m in mc)
            {
                bts[0] = (byte)int.Parse(m.Groups[2].Value, System.Globalization.NumberStyles.HexNumber);
                bts[1] = (byte)int.Parse(m.Groups[1].Value, System.Globalization.NumberStyles.HexNumber);
                r += Encoding.Unicode.GetString(bts);
            }
            return r;
        }
分享到:
评论

相关推荐

    ASP.NET实现 DES加密解密类

    本文将详细解释如何在ASP.NET中使用C#实现DES加密和解密。 1. **DES加密算法**: DES是一种分组密码,它使用64位的明文块和64位的密钥进行操作。在实际应用中,由于DES的安全性相对较低,通常会使用3DES(Triple ...

    ASP.NET的MD5和DES加密和解密算法

    ASP.NET的MD5和DES加密和解密算法 非常好的资源 欢迎大家参考

    ASP.NET url参数传递加密及解密方法

    这些类提供了强大的加密算法,例如3DES、AES和RSA,它们都是广泛认可的对称和非对称加密算法。 3. **对称加密**:如3DES和AES,使用相同的密钥进行加密和解密。优点是速度快,适合大量数据的加密。在ASP.NET中,...

    ASP.NET各种加密方式DEMO

    6. DESCryptoServiceProvider:是.NET Framework中对DES加密算法的实现。 在ASP.NET中,`System.Security.Cryptography`命名空间是处理所有加密操作的核心,提供了丰富的类库和方法。此外,`System.Web.Security`...

    Asp.net 2.0 DES加密解密

    提供Asp.net 2.0文件和字符串的DES算法加密解密. 在项目的Bin文件夹里引用这个文件就可以了,或者直接考到Bin目录里。。专门给初学者用的呵呵。。

    ASP.NET加密算法

    包含3Des,TripledDES,md5等加密字符串

    ASP.NET加密源代码 三层

    1. **加密算法**:在ASP.NET中,常见的加密算法有对称加密(如AES、DES、3DES)和非对称加密(如RSA)。对称加密速度快,适合大量数据加密;非对称加密安全性高,但速度较慢,常用于密钥交换。源代码可能涉及到这些...

    asp.net加密解密示例

    常见的对称加密算法有DES、3DES、AES等。例如,使用AES(高级加密标准)时,可以使用`System.Security.Cryptography.Aes`类。以下是一个简单的AES加密解密示例: ```csharp using System; using System.IO; using ...

    asp.net中加密数据库数据

    ASP.NET中常用的对称加密算法有AES(高级加密标准)和DES(数据加密标准)。使用`System.Security.Cryptography`命名空间中的类,如`Aes`或` DESCryptoServiceProvider`,可以轻松实现对称加密。 2. 非对称加密:非...

    C# ASP.NET - 加密与解密数据库中字段数据

    `DESCryptoServiceProvider`是.NET Framework提供的一种对称加密算法,它基于DES(Data Encryption Standard)标准,用于实现快速、安全的数据加密。 一、DES加密算法基础 DES是一种古老的加密算法,它使用64位的...

    .net加密解密算法demo

    在.NET中,常用的加密算法包括对称加密(如:AES、DES、3DES)和非对称加密(如:RSA、DSA)。对称加密使用相同的密钥进行加密和解密,速度快,适合大量数据的加密;非对称加密则使用一对公钥和私钥,安全性更高,但...

    asp.net core常见的4种数据加密算法

    总结来说,ASP.NET Core提供了丰富的加密和解密工具,包括对称加密(如DES、3DES和AES)、非对称加密(如RSA和ECC)、哈希函数(如MD5)以及认证码(如HMAC)。选择哪种加密算法取决于应用场景、安全需求和性能考虑...

    详述Asp.net的加密解密技巧

    总结来说,Asp.NET 提供了强大的加密和解密工具,涵盖了从基本的DES到现代的AES,以及非对称加密和散列算法。开发者可以通过 .NET Framework 中的 `System.Security.Cryptography` 命名空间轻松集成这些功能,确保...

    asp.net 加密解密工具!

    ASP.NET提供了丰富的加密解密功能,支持多种加密算法。开发人员可以根据需求选择合适的加密技术,结合内置的类库或使用专门的工具进行操作。同时,良好的密钥管理策略也是确保数据安全的关键。对于测试目的,可以...

    asp.net MD5加密

    除了基本的MD5加密,ASP.NET还提供了多种加密和解密方式,例如SHA系列、AES、DES等。这些算法各有特点,适用于不同的安全需求。例如,如果需要更高级的安全性,可以考虑使用RSA或AES等对称/非对称加密算法。 在实际...

    【ASP.NET编程知识】浅谈.NET中加密和解密的实现方法分享.docx

    对称加密算法,如DES、TripleDES和Rijndael,使用同一密钥进行加密和解密,适合本地数据的快速加密,因为它们的计算效率较高。Rijndael,也被称为AES(高级加密标准),是目前广泛使用的对称加密算法,具有较高的...

    asp.net的加密解密技巧

    - 3DES(三重数据加密算法):对DES算法的改进,通过使用三个不同的密钥对数据进行三次加密,提高了安全性。 - RC2和RC4:这两种算法适用于快速加密大量数据,RC4通常用于网络通信,而RC2在某些软件中用于替代DES。 ...

    .NET加密技术剖析对称加密技术

    .NET加密技术是软件开发中确保数据安全的重要环节,它涵盖了多种加密算法和方法,用于保护敏感信息不被未经授权的人员访问。对称加密技术是一种常见的加密手段,它以其高效和简单的特点,在.NET框架中得到了广泛应用...

    .NET 2种加密算法,以及解密

    在ASP.NET中,我们可以使用`System.Security.Cryptography`命名空间中的`DESCryptoServiceProvider`类来实现DES加密和解密。 #### 加密过程: 1. 创建`DESCryptoServiceProvider`实例。 2. 使用`CreateEncryptor`...

    asp.net 字符串加密减密

    1. **System.Security.Cryptography** 命名空间:ASP.NET提供了丰富的加密类库,如AES(高级加密标准)、DES(数据加密标准)、RSA(公钥加密算法)等。其中,AES是最常用的对称加密算法,适用于字符串加密。 2. **...

Global site tag (gtag.js) - Google Analytics