加密与解密

using System.Security.Cryptography;

 /**//// <summary>
    /// 得到用对称算法进行加密的字符串
    /// </summary>
    /// <param name="data">待加密的字符串</param>
    /// <returns></returns>
    public string Encrypt(string data)
    {
        if (data == null)
            data = "";
        string tempStr = "";
        for (int i = data.Length - 1; i >= 0; i--)
        {
            tempStr += ((char)(Convert.ToInt32(data[i]) + i)).ToString();
        }
        byte[] bytIn = UTF8Encoding.UTF8.GetBytes(tempStr);
        MemoryStream ms = new MemoryStream();
        DES encrypt = DES.Create();
        encrypt.Key = GetKey();
        encrypt.IV = GetIV();
        ICryptoTransform encrypto = encrypt.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="code">待解密的字符串</param>
    /// <returns></returns>
    public string Decode(string code)
    {
        byte[] bytIn = Convert.FromBase64String(code);
        MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length);
        DES encrypt = DES.Create();
        encrypt.Key = GetKey();
        encrypt.IV = GetIV();
        ICryptoTransform encrypto = encrypt.CreateDecryptor();
        CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);
        StreamReader sr = new StreamReader(cs);
        string ret = sr.ReadToEnd();
        string tempStr = "";
        sr.Close();
        ms.Close();
        int j = 0;
        for (int i = ret.Length - 1; i >= 0; i--)
        {
            tempStr += ((char)(Convert.ToInt32(ret[i]) - j)).ToString();
            j++;
        }
        return tempStr;
    }
    /**//// <summary>
    /// 得到对称加密算法的key
    /// </summary>
    /// <returns></returns>
    private static byte[] GetKey()
    {
        string key = "Guz(%&hj7x89H$yuB*h%(HilJ$lhj!y6I0456FtmaT5&fvHUFCy76&(*jkP87j";
        DES encrypt = DES.Create();
        encrypt.GenerateKey();
        byte[] byteTemp = encrypt.Key;

        if (key.Length > byteTemp.Length)
            key = key.Substring(0, byteTemp.Length);
        else if (key.Length < byteTemp.Length)
            key = key.PadRight(byteTemp.Length, ' ');
        return System.Text.ASCIIEncoding.ASCII.GetBytes(key);
    }

    /**//// <summary>
    /// 得到对称加密算法的向量
    /// </summary>
    /// <returns></returns>
    private static byte[] GetIV()
    {
        string sTemp = "UY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hE4ghj*Ghg7!rNIfb&95G";
        DES encrypt = DES.Create();
        encrypt.GenerateKey();
        byte[] bytTemp = encrypt.IV;
        int IVLength = bytTemp.Length;
        if (sTemp.Length > IVLength)
            sTemp = sTemp.Substring(0, IVLength);
        else if (sTemp.Length < IVLength)
            sTemp = sTemp.PadRight(IVLength, ' ');
        return System.Text.ASCIIEncoding.ASCII.GetBytes(sTemp);
    }
posted @ 2008-06-19 14:48  TerryLove  阅读(182)  评论(0编辑  收藏  举报