当前位置: 移动技术网 > IT编程>开发语言>.net > ASP.NET加密解密算法分享

ASP.NET加密解密算法分享

2017年12月12日  | 移动技术网IT编程  | 我要评论

西峡帝景天成,中国水处理工程网,揭穿七大生男孩方法传言

#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

以上所述就是本文的全部内容了,希望大家能够喜欢。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网