zoukankan      html  css  js  c++  java
  • DESCryptoServiceProvider 类加密解密

    DESCryptoServiceProvider  点击查看介绍

    加密解密辅助类:点击查看

    私钥加密

    定义:定义一个包装对象来访问加密服务提供程序 (CSP) 版本的数据加密标准 (DES) 算法。 此类不能被继承。

    研究这个类不如去研究它的父类,所以我们把重点转移到 Des这个类

    Des

    定义:表示数据加密标准 (DES) 算法的基类,所有 DES 实现都必须从此基类派生。

    你需要知道:  

    你只用设置Key(秘钥)和 IV(向量)。

     

     4.0以下

       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));

    4.5或以上就会显示此类已过时,所以我们得换一种写法。

    我们可以根据密码来加密

      public static string MD5(string str)
            {
                //微软md5方法参考return FormsAuthentication.HashPasswordForStoringInConfigFile(str, "md5");
                byte[] b = Encoding.Default.GetBytes(str);
                b = new MD5CryptoServiceProvider().ComputeHash(b); 
                string ret = "";
                for (int i = 0; i < b.Length; i++)
                    ret += b[i].ToString("x").PadLeft(2, '0'); //转成16进制,如果小于2位用0补充
                return ret;
            }

     我们配置好了Key和IV ,就可以使用这个了,你可以知道,加密和解密所配置的Key和IV必须为一样的。

      加密/解码都返回这个接口

    准备工作完成了。最后一个类

    CryptoStream 类

     定义将数据流链接到加密转换的流。

    第一个参数         流,

    第二个参数         接口 

    第三个参数       枚举

    完整的一套加密: 

      ///// <summary> 
            ///// 加密数据 
            ///// </summary> 
            ///// <param name="text">加密字符串</param> 
            ///// <param name="skey">生成秘钥,默认为MATICSOFT</param> 
            ///// <returns>返回加密字符串</returns> 
            public static string Encrypt(string Text, string sKey = "MATICSOFT")
            {
                DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                byte[] inputByteArray;
                inputByteArray = Encoding.Default.GetBytes(Text); //把文本转成字节
                des.Key = ASCIIEncoding.ASCII.GetBytes(MD5(sKey).Substring(0, 8));
                des.IV = ASCIIEncoding.ASCII.GetBytes(MD5(sKey).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);//十六进制字符串,后面的2为精度.
                }
                return ret.ToString();
            }
    
    
            /// <summary>
            /// 对秘钥进行处理
            /// </summary>
            /// <param name="str">你的秘钥</param>
            /// <returns></returns>
            public static string MD5(string str)
            {
                //微软md5方法参考return FormsAuthentication.HashPasswordForStoringInConfigFile(str, "md5");
                byte[] b = Encoding.Default.GetBytes(str);
                b = new MD5CryptoServiceProvider().ComputeHash(b);
                string ret = "";
                for (int i = 0; i < b.Length; i++)
                    ret += b[i].ToString("x").PadLeft(2, '0'); //转成16进制,如果小于2位用0补充
                return ret;
            }
    /// <summary> 
            /// 解密数据 
            /// </summary> 
            /// <param name="Text">加密的字符串</param> 
            /// <param name="sKey">解密秘钥</param> 
            /// <returns>解密后的字符串</returns> 
            public static string Decrypt(string Text, string sKey = "MATICSOFT")
            {
                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(MD5(sKey).Substring(0, 8));
                des.IV = ASCIIEncoding.ASCII.GetBytes(MD5(sKey).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());
            }
  • 相关阅读:
    1.4redis小结--队列在抢购活动的实现思路
    1.3redis小结--配置php reids拓展
    redis小结 1-2
    redis小结 1-1
    pandas学习小记
    Python简单算法的实现
    python编码
    ThinkPHP中的__initialize()和类的构造函数__construct()
    js正则常用方法
    总结了下PHPExcel官方读取的几个例子
  • 原文地址:https://www.cnblogs.com/Sea1ee/p/7290860.html
Copyright © 2011-2022 走看看