您现在的位置: 365建站网 > 365文章 > Asp.Net 加密解密

Asp.Net 加密解密

文章来源:365jz.com     点击数:275    更新时间:2011-03-24 14:50   参与评论

</>code

  1. #region DES加密解密
    /// <summary>
    /// DES加密
    /// </summary>
    /// <param name="strSource">待加密字串</param>
    /// <param name="key">32位Key值</param>
    /// <returns>加密后的字符串</returns>
    public string DESEncrypt(string strSource)
    {
    return DESEncrypt(strSource, DESKey);
    }
    public string DESEncrypt(string strSource, byte[] key)
    {
    SymmetricAlgorithm sa
    = Rijndael.Create();
    sa.Key
    = key;
    sa.Mode
    = CipherMode.ECB;
    sa.Padding
    = PaddingMode.Zeros;
    MemoryStream ms
    = new MemoryStream();
    CryptoStream cs
    = new CryptoStream(ms, sa.CreateEncryptor(), CryptoStreamMode.Write);
    byte[] byt = Encoding.Unicode.GetBytes(strSource);
    cs.Write(byt,
    0, byt.Length);
    cs.FlushFinalBlock();
    cs.Close();
    return Convert.ToBase64String(ms.ToArray());
    }
    /// <summary>
    /// DES解密
    /// </summary>
    /// <param name="strSource">待解密的字串</param>
    /// <param name="key">32位Key值</param>
    /// <returns>解密后的字符串</returns>
    public string DESDecrypt(string strSource)
    {
    return DESDecrypt(strSource, DESKey);
    }
    public string DESDecrypt(string strSource, byte[] key)
    {
    SymmetricAlgorithm sa
    = Rijndael.Create();
    sa.Key
    = key;
    sa.Mode
    = CipherMode.ECB;
    sa.Padding
    = PaddingMode.Zeros;
    ICryptoTransform ct
    = sa.CreateDecryptor();
    byte[] byt = Convert.FromBase64String(strSource);
    MemoryStream ms
    = new MemoryStream(byt);
    CryptoStream cs
    = new CryptoStream(ms, ct, CryptoStreamMode.Read);
    StreamReader sr
    = new StreamReader(cs, Encoding.Unicode);
    return sr.ReadToEnd();
    }
    #endregion

    #region 一个用hash实现的加密解密方法
    /// <summary>
    /// 加密
    /// </summary>
    /// <param name="src"></param>
    /// <returns></returns>
    public static string EncryptStrByHash(string src)
    {
    if (src.Length == 0)
    {
    return "";
    }
    byte[] HaKey = System.Text.Encoding.ASCII.GetBytes((src + "Test").ToCharArray());
    byte[] HaData = new byte[20];
    HMACSHA1 Hmac
    = new HMACSHA1(HaKey);
    CryptoStream cs
    = new CryptoStream(Stream.Null, Hmac, CryptoStreamMode.Write);
    try
    {
    cs.Write(HaData,
    0, HaData.Length);
    }
    finally
    {
    cs.Close();
    }
    string HaResult = System.Convert.ToBase64String(Hmac.Hash).Substring(0, 16);
    byte[] RiKey = System.Text.Encoding.ASCII.GetBytes(HaResult.ToCharArray());
    byte[] RiDataBuf = System.Text.Encoding.ASCII.GetBytes(src.ToCharArray());
    byte[] EncodedBytes = { };
    MemoryStream ms
    = new MemoryStream();
    RijndaelManaged rv
    = new RijndaelManaged();
    cs
    = new CryptoStream(ms, rv.CreateEncryptor(RiKey, RiKey), CryptoStreamMode.Write);
    try
    {
    cs.Write(RiDataBuf,
    0, RiDataBuf.Length);
    cs.FlushFinalBlock();
    EncodedBytes
    = ms.ToArray();
    }
    finally
    {
    ms.Close();
    cs.Close();
    }
    return HaResult + System.Convert.ToBase64String(EncodedBytes);
    }

    /// <summary>
    /// 解密
    /// </summary>
    /// <param name="src"></param>
    /// <returns></returns>
    public static string DecrypStrByHash(string src)
    {
    if (src.Length < 40) return "";
    byte[] SrcBytes = System.Convert.FromBase64String(src.Substring(16));
    byte[] RiKey = System.Text.Encoding.ASCII.GetBytes(src.Substring(0, 16).ToCharArray());
    byte[] InitialText = new byte[SrcBytes.Length];
    RijndaelManaged rv
    = new RijndaelManaged();
    MemoryStream ms
    = new MemoryStream(SrcBytes);
    CryptoStream cs
    = new CryptoStream(ms, rv.CreateDecryptor(RiKey, RiKey), CryptoStreamMode.Read);
    try
    {
    cs.Read(InitialText,
    0, InitialText.Length);
    }
    finally
    {
    ms.Close();
    cs.Close();
    }
    System.Text.StringBuilder Result
    = new System.Text.StringBuilder();
    for (int i = 0; i < InitialText.Length; ++i) if (InitialText[i] > 0) Result.Append((char)InitialText[i]);
    return Result.ToString();
    }

    /// <summary>
    /// 对加密后的密文重新编码,如果密文长>16,则去掉前16个字符,如果长度小于16,返回空字符串
    /// </summary>
    /// <param name="s"></param>
    /// <returns></returns>
    public string ReEncryptStrByHash(string s)
    {
    string e = Encrypt.EncryptStrByHash(s);
    return ((e.Length > 16) ? e.Substring(16) : "");
    }
    #endregion

    #region Md5加密,生成16位或32位,生成的密文都是大写
    public static string Md5To16(string str)
    {
    MD5CryptoServiceProvider md5
    = new MD5CryptoServiceProvider();
    string t2 = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(str)), 4, 8);
    t2
    = t2.Replace("-", "");
    return t2;
    }

    //// <summary>
    /// MD5 32位加密
    /// </summary>
    /// <param name="str"></param>
    /// <returns></returns>
    public static string Md5To32(string str)
    {
    string pwd = "";
    MD5 md5
    = MD5.Create();
    byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(str));
    for (int i = 0; i < s.Length; i++)
    {
    pwd
    = pwd + s[i].ToString("X");
    }
    return pwd;
    }
    #endregion

    #region 3DES加密解密
    public string Encrypt3DES(string str)
    {
    //密钥
    string sKey = "wyw308";
    // //矢量,可为空
    string sIV = "scf521";
    // //构造对称算法
    SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider();

    ICryptoTransform ct;
    MemoryStream ms;
    CryptoStream cs;
    byte[] byt;
    mCSP.Key
    = Convert.FromBase64String(sKey);
    mCSP.IV
    = Convert.FromBase64String(sIV);
    mCSP.Mode
    = System.Security.Cryptography.CipherMode.ECB;
    mCSP.Padding
    = System.Security.Cryptography.PaddingMode.PKCS7;
    ct
    = mCSP.CreateEncryptor(mCSP.Key, mCSP.IV);
    byt
    = Encoding.UTF8.GetBytes(str);
    ms
    = new MemoryStream();
    cs
    = new CryptoStream(ms, ct, CryptoStreamMode.Write);
    cs.Write(byt,
    0, byt.Length);
    cs.FlushFinalBlock();
    cs.Close();
    return Convert.ToBase64String(ms.ToArray());
    }
    /// <summary>
    /// 带指定密钥和矢量的3DES加密
    /// </summary>
    /// <param name="str"></param>
    /// <param name="sKey"></param>
    /// <param name="sIV"></param>
    /// <returns></returns>
    public string Encrypt3DES(string str, string sKey, string sIV)
    {
    SymmetricAlgorithm mCSP
    = new TripleDESCryptoServiceProvider();
    ICryptoTransform ct;
    MemoryStream ms;
    CryptoStream cs;
    byte[] byt;
    mCSP.Key
    = Convert.FromBase64String(sKey);
    mCSP.IV
    = Convert.FromBase64String(sIV);
    mCSP.Mode
    = System.Security.Cryptography.CipherMode.ECB;
    mCSP.Padding
    = System.Security.Cryptography.PaddingMode.PKCS7;
    ct
    = mCSP.CreateEncryptor(mCSP.Key, mCSP.IV);
    byt
    = Encoding.UTF8.GetBytes(str);
    ms
    = new MemoryStream();
    cs
    = new CryptoStream(ms, ct, CryptoStreamMode.Write);
    cs.Write(byt,
    0, byt.Length);
    cs.FlushFinalBlock();
    cs.Close();
    return Convert.ToBase64String(ms.ToArray());
    }

    //解密
    public string Decrypt3DES(string Value)
    {
    string sKey = "wyw308";
    string sIV = "scf521";
    SymmetricAlgorithm mCSP
    = new TripleDESCryptoServiceProvider();
    ICryptoTransform ct;
    MemoryStream ms;
    CryptoStream cs;
    byte[] byt;
    mCSP.Key
    = Convert.FromBase64String(sKey);
    mCSP.IV
    = Convert.FromBase64String(sIV);
    mCSP.Mode
    = System.Security.Cryptography.CipherMode.ECB;
    mCSP.Padding
    = System.Security.Cryptography.PaddingMode.PKCS7;
    ct
    = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV);
    byt
    = Convert.FromBase64String(Value);
    ms
    = new MemoryStream();
    cs
    = new CryptoStream(ms, ct, CryptoStreamMode.Write);
    cs.Write(byt,
    0, byt.Length);
    cs.FlushFinalBlock();
    cs.Close();
    return Encoding.UTF8.GetString(ms.ToArray());
    }
    /// <summary>
    /// 带指定密钥和矢量的3DES解密
    /// </summary>
    /// <param name="Value"></param>
    /// <param name="sKey"></param>
    /// <param name="sIV"></param>
    /// <returns></returns>
    public string Decrypt3DES(string str, string sKey, string sIV)
    {
    SymmetricAlgorithm mCSP
    = new TripleDESCryptoServiceProvider();
    ICryptoTransform ct;
    MemoryStream ms;
    CryptoStream cs;
    byte[] byt;
    mCSP.Key
    = Convert.FromBase64String(sKey);
    mCSP.IV
    = Convert.FromBase64String(sIV);
    mCSP.Mode
    = System.Security.Cryptography.CipherMode.ECB;
    mCSP.Padding
    = System.Security.Cryptography.PaddingMode.PKCS7;
    ct
    = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV);
    byt
    = Convert.FromBase64String(str);
    ms
    = new MemoryStream();
    cs
    = new CryptoStream(ms, ct, CryptoStreamMode.Write);
    cs.Write(byt,
    0, byt.Length);
    cs.FlushFinalBlock();
    cs.Close();
    return Encoding.UTF8.GetString(ms.ToArray());
    }
    #endregion

    #region 一个简单的加密解密方法,只支持英文
    public static string EnCryptEnStr(string str) //倒序加1加密
    {
    byte[] by = new byte[str.Length];
    for (int i = 0;
    i
    <= str.Length - 1;
    i
    ++)
    {
    by[i]
    = (byte)((byte)str[i] + 1);
    }
    str
    = "";
    for (int i = by.Length - 1;
    i
    >= 0;
    i
    --)
    {
    str
    += ((char)by[i]).ToString();
    }
    return str;
    }
    public static string DeCryptEnStr(string str) //顺序减1解码
    {
    byte[] by = new byte[str.Length];
    for (int i = 0;
    i
    <= str.Length - 1;
    i
    ++)
    {
    by[i]
    = (byte)((byte)str[i] - 1);
    }
    str
    = "";
    for (int i = by.Length - 1;
    i
    >= 0;
    i
    --)
    {
    str
    += ((char)by[i]).ToString();
    }
    return str;
    }
    #endregion

    #region 一个简单的加密解密方法,在上一个的基础上支持中文
    public static string EnCryptCnStr(string str)
    {
    string htext = ""; // blank text

    for (int i = 0; i < str.Length; i++)
    {
    htext
    = htext + (char)(str[i] + 10 - 1 * 2);
    }
    return htext;
    }

    public static string DeCryptCnStr(string str)
    {
    string dtext = "";

    for (int i = 0; i < str.Length; i++)
    {
    dtext
    = dtext + (char)(str[i] - 10 + 1 * 2);
    }
    return dtext;
    }
    #endregion

    #region Url地址编码解码

    /// <summary>
    /// 编码Url地址
    /// </summary>
    /// <param name="url"></param>
    /// <returns></returns>
    public static string UrlEncode(string url)
    {
    byte[] mByte = null;
    mByte
    = System.Text.Encoding.GetEncoding("GB2312").GetBytes(url);

    return System.Web.HttpUtility.UrlEncode(mByte);
    }

    /// <summary>
    /// 解码Url地址
    /// </summary>
    /// <param name="url"></param>
    /// <returns></returns>
    public static string UrlDecode(string url)
    {
    return HttpUtility.UrlDecode(url, System.Text.Encoding.GetEncoding("GB2312"));
    }
    #endregion

如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛

发表评论 (275人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
昵称:
最新评论
------分隔线----------------------------

快速入口

· 365软件
· 杰创官网
· 建站工具
· 网站大全

其它栏目

· 建站教程
· 365学习

业务咨询

· 技术支持
· 服务时间:9:00-18:00
365建站网二维码

Powered by 365建站网 RSS地图 HTML地图

copyright © 2013-2024 版权所有 鄂ICP备17013400号