我用cookie保存了用户名,为了保证安全期间,我用md5加密,但不知如何解密。请问如何做一个加密和解密的算法

解决方案 »

  1.   


    using System;
    using System.IO;
    using System.Security.Cryptography;
    using System.Text; namespace encrypt
    {
        class encrypt
        {
            private SymmetricAlgorithm mobjCryptoService;
            private string Key;
            /// <summary> 
            /// 对称加密类的构造函数 
            /// </summary> 
            public encrypt()
            {
                mobjCryptoService = new RijndaelManaged();
                Key = "Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7";
            }
            /// <summary> 
            /// 获得密钥 
            /// </summary> 
            /// <returns>密钥</returns> 
            private byte[] GetLegalKey()
            {
                string sTemp = Key;
                mobjCryptoService.GenerateKey();
                byte[] bytTemp = mobjCryptoService.Key;
                int KeyLength = bytTemp.Length;
                if (sTemp.Length > KeyLength)
                    sTemp = sTemp.Substring(0, KeyLength);
                else if (sTemp.Length < KeyLength)
                    sTemp = sTemp.PadRight(KeyLength, ' ');
                return ASCIIEncoding.ASCII.GetBytes(sTemp);
            }
            /// <summary> 
            /// 获得初始向量IV 
            /// </summary> 
            /// <returns>初试向量IV</returns> 
            private byte[] GetLegalIV()
            {
                string sTemp = "E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk";
                mobjCryptoService.GenerateIV();
                byte[] bytTemp = mobjCryptoService.IV;
                int IVLength = bytTemp.Length;
                if (sTemp.Length > IVLength)
                    sTemp = sTemp.Substring(0, IVLength);
                else if (sTemp.Length < IVLength)
                    sTemp = sTemp.PadRight(IVLength, ' ');
                return ASCIIEncoding.ASCII.GetBytes(sTemp);
            }
            /// <summary> 
            /// 加密方法 
            /// </summary> 
            /// <param name="Source">待加密的串</param> 
            /// <returns>经过加密的串</returns> 
            public string Encrypto(string Source)
            {
                byte[] bytIn = UTF8Encoding.UTF8.GetBytes(Source);
                MemoryStream ms = new MemoryStream();
                mobjCryptoService.Key = GetLegalKey();
                mobjCryptoService.IV = GetLegalIV();
                ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor();
                CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);
                cs.Write(bytIn, 0, bytIn.Length);
                cs.FlushFinalBlock();
                ms.Close();
                byte[] bytOut = ms.ToArray();
                return Convert.ToBase64String(bytOut);
            }
            /// <summary> 
            /// 解密方法 
            /// </summary> 
            /// <param name="Source">待解密的串</param> 
            /// <returns>经过解密的串</returns> 
            public string Decrypto(string Source)
            {
                byte[] bytIn = Convert.FromBase64String(Source);
                MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length);
                mobjCryptoService.Key = GetLegalKey();
                mobjCryptoService.IV = GetLegalIV();
                ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor();
                CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);
                StreamReader sr = new StreamReader(cs);
                return sr.ReadToEnd();
            }
        }
        public class SymmetricMethod
        {        
        } }
      

  2.   

    MD5是不可逆的,只能用其他算法
    2楼的没仔细看,应该能用
    我再给你一个://'加密函数 
            public static String Encrypt(String strText, String strEncrKey)
            {
                Byte[] byKey = { };
                Byte[] IV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
                try
                {
                    byKey = System.Text.Encoding.UTF8.GetBytes(strEncrKey.Substring(0, 8));
                    DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                    Byte[] inputByteArray = Encoding.UTF8.GetBytes(strText);
                    MemoryStream ms = new MemoryStream();
                    CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(byKey, IV), CryptoStreamMode.Write);
                    cs.Write(inputByteArray, 0, inputByteArray.Length);
                    cs.FlushFinalBlock();
                    return Convert.ToBase64String(ms.ToArray());
                }
                catch (Exception ex)
                {
                    return ex.Message;
                }
            }        //'解密函数 
            public static String Decrypt(String strText, String sDecrKey)
            {
                Byte[] byKey = { };
                Byte[] IV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
                Byte[] inputByteArray = new byte[strText.Length];
                try
                {
                    byKey = System.Text.Encoding.UTF8.GetBytes(sDecrKey.Substring(0, 8));
                    DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                    inputByteArray = Convert.FromBase64String(strText);
                    MemoryStream ms = new MemoryStream();
                    CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(byKey, IV), CryptoStreamMode.Write);
                    cs.Write(inputByteArray, 0, inputByteArray.Length);
                    cs.FlushFinalBlock();
                    System.Text.Encoding encoding = System.Text.Encoding.UTF8;
                    return encoding.GetString(ms.ToArray());
                }
                catch (Exception ex)
                {
                    return ex.Message;
                }
            }
      

  3.   

    http://topic.csdn.net/u/20080820/13/041ec4cf-85da-4ea4-aeb7-b3283e8704d8.html
    看这个对你有帮助吗
      

  4.   

    服务端保存的cookie不是用明文保存的啊 所以不用加密吧?