zoukankan      html  css  js  c++  java
  • .Net加密与解密

                                    .Net加密与解密

    正文:

          1.MD5加密实现方式一:

            /// <summary>
            /// 获取MD5密码
            /// </summary>
            /// <returns></returns>
            public static string GetMd5(string pwd)
            {
                string md5Pwd = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(pwd, "md5");
                return md5Pwd;
            }

           2.MD5加密实现方式二:

            /// <summary>
            /// 使用自带的类进行MD5加密
            /// </summary>
            /// <param name="pwd"></param>
            /// <returns></returns>
            public static string GetMd5(string pwd)
            {
                MD5 md5 = MD5.Create(); //创建用于MD5加密的MD5对象
                byte[] ms=Encoding.Default.GetBytes(pwd);
                byte[] newms=md5.ComputeHash(ms);//对根据用户密码生成的byte类型的数据进行hash散列算法,返回了一个新的byte数组
                StringBuilder sb = new StringBuilder();
                foreach (byte item in newms)
                {
                    //x:小写的16进制数  X:大写的16进制数  后面的数值是指转换后的16进制的位数
                    sb.Append(item.ToString("X2"));
                }
                return sb.ToString();
            }

           Note:只有加密没有解密,单向的;

           3.DES加密
            /// <summary>
            /// 加密数据
            /// </summary>
            /// <param name="Text">加密数据</param>
            /// <param name="sKey">根据key加密</param>
            /// <returns></returns>
            public static string Encrypt(string Text,string sKey)
            {
                DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                byte[] inputByteArray;
                inputByteArray=Encoding.Default.GetBytes(Text);
                des.Key = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
                des.IV = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
                System.IO.MemoryStream ms=new System.IO.MemoryStream();
                CryptoStream cs=new CryptoStream(ms,des.CreateEncryptor(),CryptoStreamMode.Write);
                cs.Write(inputByteArray,0,inputByteArray.Length);
                cs.FlushFinalBlock();
                StringBuilder ret=new StringBuilder();
                foreach( byte b in ms.ToArray())
                {
                    ret.AppendFormat("{0:X2}",b);
                }
                return ret.ToString();
            }
            4.DES解密:
            /// <summary>
            /// 解密数据
            /// </summary>
            /// <param name="Text"></param>
            /// <param name="sKey"></param>
            /// <returns></returns>
            public static string Decrypt(string Text,string sKey)
            {
                DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                int len;
                len=Text.Length/2;
                byte[] inputByteArray = new byte[len];
                int x,i;
                for(x=0;x<len;x++)
                {
                    i = Convert.ToInt32(Text.Substring(x * 2, 2), 16);
                    inputByteArray[x]=(byte)i;
                }
                des.Key = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
                des.IV = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
                System.IO.MemoryStream ms=new System.IO.MemoryStream();
                CryptoStream cs=new CryptoStream(ms,des.CreateDecryptor(),CryptoStreamMode.Write);
                cs.Write(inputByteArray,0,inputByteArray.Length);
                cs.FlushFinalBlock();
                return Encoding.Default.GetString(ms.ToArray());
            }
           5.  3des加密
            /// <summary>
            /// 3des加密字符串
            /// </summary>
            /// <param name="text">要加密的字符串</param>
            /// <param name="key">密钥</param>
            /// <returns>加密后并经base64编码的字符串</returns>
            /// <remarks>静态方法,采用默认ascii编码</remarks>
            public static string Encrypt(string text, string key)
            {
                TripleDESCryptoServiceProvider DES = new
                    TripleDESCryptoServiceProvider();
                MD5CryptoServiceProvider hashMD5 = new MD5CryptoServiceProvider();

                //3des密匙
                DES.Key = hashMD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(key));
                //模式为电子密码块模式
                DES.Mode = CipherMode.ECB;

                //创建Encryptor对象
                ICryptoTransform DESEncrypt = DES.CreateEncryptor();
                //将需要加密的字符串转化为字节数组
                byte[] Buffer = ASCIIEncoding.UTF8.GetBytes(text);
                //通过加密对象的TransformFinalBlock()进行加密
                //转化为Base64字符串返回
                return Convert.ToBase64String(DESEncrypt.TransformFinalBlock
                    (Buffer, 0, Buffer.Length));
            }//end method

           6.3des解密
            /// <summary>
            /// 3des解密字符串
            /// </summary>
            /// <param name="text">要解密的字符串</param>
            /// <param name="key">密钥</param>
            /// <returns>解密后的字符串</returns>
            /// <exception cref="">密钥错误</exception>
            /// <remarks>静态方法,采用默认ascii编码</remarks>
            public static string Decrypt(string text, string key)
            {
                TripleDESCryptoServiceProvider DES = new
                    TripleDESCryptoServiceProvider();
                MD5CryptoServiceProvider hashMD5 = new MD5CryptoServiceProvider();
                //密匙
                DES.Key = hashMD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(key));
                //模式
                DES.Mode = CipherMode.ECB;
                //创建Encryptor对象
                ICryptoTransform DESDecrypt = DES.CreateDecryptor();

                string result = "";
                try
                {
                    //将加密后的字符串转化为byte数组
                    byte[] Buffer = Convert.FromBase64String(text);
                    //TransformFinalBlock()返回解密后的byte数组
                    //通过UTF8编码返回字符串
                    result = ASCIIEncoding.UTF8.GetString(DESDecrypt.TransformFinalBlock
                        (Buffer, 0, Buffer.Length));
                }
                catch (Exception e)
                {
                    return text;
                   // throw (new Exception("Invalid Key or input string is not a valid base64 string", e));
                }

                return result;
            }//end method

  • 相关阅读:
    有关token
    JQuery自定义resize事件代码解析
    vue--为网页添加动态响应背景
    如何查询数据库中所有表格,或者查询是否存在某个表格-mysql和oracle
    Foxmail: 错误信息::ssl连接错误, errorCode: 5,各种解决方案的大杂烩。
    [转] Hadoop入门系列(一)Window环境下搭建hadoop和hdfs的基本操作
    java连数据库和数据库连接池踩坑日记(二)-------数据库连接池c3p0
    java实现将汉字转为拼音
    Sublime 如何修改默认编码格式
    JSP 表单处理
  • 原文地址:https://www.cnblogs.com/Francis-YZR/p/4784309.html
Copyright © 2011-2022 走看看