DES,MD5,SHA1等加密
private byte[] Keys = { 0xEF, 0xAB, 0x56, 0x78, 0x90, 0x34, 0xCD, 0x12 };
        /// <summary>
        /// DES加密字符串
        /// </summary>
        /// <param name="encryptString">待加密的字符串</param>
        /// <param name="encryptKey">加密密钥,要求为8位</param>
        /// <returns>加密成功返回加密后的字符串,失败返回源串</returns>
        public 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;
            }
        }
        public string DecryptDES(string decryptString, string decryptKey)
        {
            try
            {
                byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey.Substring(0, 8));
                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;
            }
        }
 
加密方法

解决方案 »

  1.   

    MSDN上的Webcast有一个系列课程专门是将.NET的安全与加密方面的视频教程(+源代码+课件)
    楼主可以去下载
      

  2.   

    /// <summary>
            /// 传入明文,返回用MD%加密后的字符串
            /// </summary>
            /// <param name="str">要加密的字符串</param>
            /// <returns>用MD5加密后的字符串</returns>
            public static string ToMD5(string str)
            {
                return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "md5");
            }
            /// <summary>
            /// 截取字符串。
            /// </summary>
            /// <param name="str">要接取得字符串</param>
            /// <param name="number">保留的字节数。按半角计算</param>
            /// <returns>指定长度的字符串</returns>
            public static string StringCal(string str, int number)
            {
                Byte[] tempStr = System.Text.Encoding.Default.GetBytes(str);
                if (tempStr.Length > number)
                {
                    return System.Text.Encoding.Default.GetString(tempStr, 0, number - 2) + "..";
                }
                else
                    return str;
            }        #region 加密,固定密钥
            /// <summary>
            /// 加密
            /// </summary>
            /// <param name="sourceData">原文</param>
            /// <returns></returns>
            public static string Encrypt(string sourceData)
            {
                //set key and initialization vector values
                //Byte[] key = new byte[] {0x21, 2, 0x88, 4, 5, 0x56, 7, 0x99};
                //Byte[] iv = new byte[] {0x21, 2, 0x88, 4, 5, 0x56, 7, 0x99};
                Byte[] key = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
                Byte[] iv = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
                try
                {
                    //convert data to byte array
                    Byte[] sourceDataBytes = System.Text.ASCIIEncoding.UTF8.GetBytes(sourceData);
                    //get target memory stream
                    MemoryStream tempStream = new MemoryStream();
                    //get encryptor and encryption stream
                    DESCryptoServiceProvider encryptor = new DESCryptoServiceProvider();
                    CryptoStream encryptionStream = new CryptoStream(tempStream, encryptor.CreateEncryptor(key, iv), CryptoStreamMode.Write);                //encrypt data
                    encryptionStream.Write(sourceDataBytes, 0, sourceDataBytes.Length);
                    encryptionStream.FlushFinalBlock();                //put data into byte array
                    Byte[] encryptedDataBytes = tempStream.GetBuffer();
                    //convert encrypted data into string
                    return System.Convert.ToBase64String(encryptedDataBytes, 0, (int)tempStream.Length);
                }
                catch (Exception ex)
                {
                    throw (ex);
                }
            }
            #endregion        #region 加密,可以设置密钥
            /// <summary>
            /// 可以设置密钥的加密方式
            /// </summary>
            /// <param name="sourceData">原文</param>
            /// <param name="key">密钥,8位数字,字符串方式</param>
            /// <returns></returns>
            public static string Encrypt(string sourceData, string key)
            {
                //set key and initialization vector values
                //Byte[] key = new byte[] {0x21, 2, 0x88, 4, 5, 0x56, 7, 0x99};
                //Byte[] iv = new byte[] {0x21, 2, 0x88, 4, 5, 0x56, 7, 0x99};            #region 检查密钥是否符合规定
                if (key.Length > 8)
                {
                    key = key.Substring(0, 8);
                }
                #endregion            char[] tmp = key.ToCharArray();
                Byte[] keys = new byte[8];
                //Byte[] keys = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
                Byte[] iv = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };            //设置密钥
                for (int i = 0; i < 8; i++)
                {
                    if (tmp.Length > i)
                    {
                        keys[i] = (byte)tmp[i];
                    }
                    else
                    {
                        keys[i] = (byte)i;
                    }
                }            try
                {
                    //convert data to byte array
                    Byte[] sourceDataBytes = System.Text.ASCIIEncoding.UTF8.GetBytes(sourceData);
                    //get target memory stream
                    MemoryStream tempStream = new MemoryStream();
                    //get encryptor and encryption stream
                    DESCryptoServiceProvider encryptor = new DESCryptoServiceProvider();
                    CryptoStream encryptionStream = new CryptoStream(tempStream, encryptor.CreateEncryptor(keys, iv), CryptoStreamMode.Write);                //encrypt data
                    encryptionStream.Write(sourceDataBytes, 0, sourceDataBytes.Length);
                    encryptionStream.FlushFinalBlock();                //put data into byte array
                    Byte[] encryptedDataBytes = tempStream.GetBuffer();
                    //convert encrypted data into string
                    return System.Convert.ToBase64String(encryptedDataBytes, 0, (int)tempStream.Length);
                }
                catch (Exception ex)
                {
                    throw (ex);
                }
            }
            #endregion        #region 解密,固定密钥
            /// <summary>
            /// 解密
            /// </summary>
            /// <param name="sourceData">密文</param>
            /// <returns></returns>
            public static string Decrypt(string sourceData)
            {
                //set key and initialization vector values
                //Byte[] key = new byte[] {0x21, 2, 0x88, 4, 5, 0x56, 7, 0x99};
                //Byte[] iv = new byte[] {0x21, 2, 0x88, 4, 5, 0x56, 7, 0x99};
                Byte[] keys = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
                Byte[] iv = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
                try
                {
                    //convert data to byte array
                    Byte[] encryptedDataBytes = System.Convert.FromBase64String(sourceData);
                    //get source memory stream and fill it 
                    MemoryStream tempStream = new MemoryStream(encryptedDataBytes, 0, encryptedDataBytes.Length);
                    //get decryptor and decryption stream 
                    DESCryptoServiceProvider decryptor = new DESCryptoServiceProvider();
                    CryptoStream decryptionStream = new CryptoStream(tempStream, decryptor.CreateDecryptor(keys, iv), CryptoStreamMode.Read);                //decrypt data 
                    StreamReader allDataReader = new StreamReader(decryptionStream);                return allDataReader.ReadToEnd();
                }
                catch (Exception ex)
                {
                    throw (ex);
                }
            }
            #endregion        #region 解密,固定密钥
            /// <summary>
            /// 解密
            /// </summary>
            /// <param name="sourceData">密文</param>
            /// <param name="key">密钥,8位数字,字符串方式</param>
            /// <returns></returns>
            public static string Decrypt(string sourceData, string key)
            {
                //set key and initialization vector values
                //Byte[] key = new byte[] {0x21, 2, 0x88, 4, 5, 0x56, 7, 0x99};
                //Byte[] iv = new byte[] {0x21, 2, 0x88, 4, 5, 0x56, 7, 0x99};            #region 检查密钥是否符合规定
                if (key.Length > 8)
                {
                    key = key.Substring(0, 8);
                }
                #endregion            char[] tmp = key.ToCharArray();
                Byte[] keys = new byte[8];
                //Byte[] keys = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
                Byte[] iv = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };            //设置密钥
                for (int i = 0; i < 8; i++)
                {
                    if (tmp.Length > i)
                    {
                        keys[i] = (byte)tmp[i];
                    }
                    else
                    {
                        keys[i] = (byte)i;
                    }
                }
                try
                {
                    //convert data to byte array
                    Byte[] encryptedDataBytes = System.Convert.FromBase64String(sourceData);
                    //get source memory stream and fill it 
                    MemoryStream tempStream = new MemoryStream(encryptedDataBytes, 0, encryptedDataBytes.Length);
                    //get decryptor and decryption stream 
                    DESCryptoServiceProvider decryptor = new DESCryptoServiceProvider();
                    CryptoStream decryptionStream = new CryptoStream(tempStream, decryptor.CreateDecryptor(keys, iv), CryptoStreamMode.Read);                //decrypt data 
                    StreamReader allDataReader = new StreamReader(decryptionStream);                return allDataReader.ReadToEnd();
                }
                catch (Exception ex)
                {
                    throw (ex);
                }
            }
            #endregion
      

  3.   

    现在网上太多的说法以至于我现在怀疑我是不是把概念搞错了???加密的目的是为了保护明文不被未授权的人看到,如何保护?自然就是加密,加密将一段明文按照某种算法(这种算法必须是开放的,你自己研究的什么加密算法就别在这里糊弄人了)产生一段密文,你希望知道密码的人可以看懂这些密文,那么他自然要使用密钥解密(对称或者非对称)的密钥既可以解密。这个过程就是加密和解密的过程。但是现在的人都很牛,他虽然看不懂这些密文,但是他可以修改这些密文(密文也可以是密码),那么你不希望对方修改密文该怎么办呢?一般情况下会使用一种叫做不可逆的编码技术,这种编码技术能够为这个密文签名,这个签名对方也知道,对方拿到密文之后用同样的算法计算这个密文的编码,如果得到的不是这个签名则说明密文被修改过,这个密文不可信。这种编码技术就是通常所说的MD5之类。
    加密解密只有两种:对称和非对称MD5不属于他们其中的任何一种,所以不是加密算法,只是编码算法,这种编码过程是不可逆的,因为MD5之后的内容非常短(依赖算法本身)。至于C#里面提供了一套完整的对称和非对称加密算法的实现,当然你可以基于这个框架实现自己的加密算法,同样也提供了一组签名算法MD5之类的类库。所有的这些类都在System.Security.Cryptography命名空间下面。