大红鹰葡京会DotNet加密方法分析–对如加密。DotNet加密方法分析–对如加密。

   
离过年还要贴近了一样龙,回家就是守在近,有人好有人愁,因为过几上不怕得更每年都的装逼大戏,亲戚朋友加同学的处处显摆,所以得靠一剂年终奖来装饰一个安稳的年,在此处自己回忆了一个问题“论装逼的技术性与要”。

   
离过年还要即了扳平天,回家已是靠近于近,有人欢喜有人忧,因为过几上便得更每年都的装逼大戏,亲戚朋友加同学的各方显摆,所以得靠一剂年终奖来装饰一个落实的年景,在此地自己回忆了一个题材“论装逼的技术性与关键”。

 
 都是总司机了,不扯,站于外场的还登,然后要后的将门关一下,我们就出发。

 
 都是总车手了,不拉,站于外侧的都入,然后要后的把门关一下,我们随后出发。

 
 上一致篇重要介绍.NET的散列加密,散列算法主要用于签名等操作,在我们的品类中,如果对加密并未特别的渴求,一般都是使的相辅相成加密方法,因为这种加密方法相较其他加密方法较为简单,但是这种加密方法于的很快,所以今天便介绍一下.NET底对称加密方法。

 
 上等同篇重要介绍.NET的散列加密,散列算法主要用以签名等操作,在我们的项目被,如果对加密未曾专门的要求,一般都是使用的相得益彰加密方法,因为这种加密方法相较其他加密方法较为简单,但是这种加密方法于的飞快,所以今天就介绍一下.NET的相得益彰加密方法。

一.DotNet针对性如加密概述:

 
 对如加密大凡采取单密钥加密方法,这也就算象征加密同解密都是为此同一个密钥。根据密码学的有关定义,对如加密系的片来5独,分别是光天化日空间,密文空间,密钥空间,加密空中,解密算法。接下来用一个示意图来表示一下:

  大红鹰葡京会 1

 
 DotNet对如加密算法的主导是一个密码函数,该函数将稳定大小的信数据块(纯文本)转换成为加密数据库(加密文书)。转化为加密文件或重建也纯文本都亟待密钥,加密是可逆的,或者说是双向的长河,可以运用密钥来反转加密功能并重建纯文本。

 
 大多数对准如加密算法是当不同之密码模式下运行,在密码函数处理多少之前,这些模式指定了备选这些数量的例外方法。密码模式产生:电子代码薄模式,密码块链接,密码反馈模式。

   有关块值填充的内容在脚会教到。

一.DotNet对如加密概述:

 
 对如加密是用单密钥加密方法,这为就表示加密及解密都是故以及一个密钥。根据密码学的相干定义,对如加密系统的一部分来5只,分别是当众空间,密文空间,密钥空间,加密上空,解密算法。接下来用一个示意图来代表一下:

  大红鹰葡京会 2

 
 DotNet对如加密算法的核心是一个密码函数,该函数将定位大小的消息数据块(纯文本)转换成加密数据库(加密文件)。转化为加密文书或重建为纯文本都需密钥,加密凡可逆的,或者说是双向的进程,可以采用密钥来反转加密功能并重建纯文本。

 
 大多数针对如加密算法是于不同之密码模式下运行,在密码函数处理数量之前,这些模式指定了预备这些多少的异方式。密码模式有:电子代码薄模式,密码块链接,密码反馈模式。

   有关块值填充的始末以底下会讲课到。

二.DotNet对称加密类解析:

二.DotNet对称加密类解析:

   1.针对性如加密分拣:

      (1).在.NET中针对如加密算法分类有如下结构图:

大红鹰葡京会 3

      (2).对于.NET对如加密算法的印证如下表:

算法名称

算法说明

DES加密算法 采用的是分组加密方式,使用56位密钥加密64位明文,最后产生64位密文
3DES加密算法 采用168位的密钥,三重加密,速度比较的慢
TripleDES加密算法 用两个密钥对数据进行3次加密/解密运算
RC2加密算法 运用密钥长度可变,对明文采取64位分组加密
RC4加密算法 运用一个密钥长度可变的面向字节流的加密算法,以随机置换为基础
RC5加密算法 运用一种分组长度、密钥长度、加密迭代轮数都可变的分组加密算法。(包含密钥扩展、加密算法、解密算法)
RC6加密算法 RC6继承了RC5的循环移位思想,RC6是输入的明文由原先2个区扩展为4个块区
Rijndael加密算法 运用反复运算的加密算法,允许数据区块及密钥的长度可变。数据区块与密钥长度的变动时各自独立的

   1.针对如加密分拣:

      (1).在.NET中对如加密算法分类有如下结构图:

大红鹰葡京会 4

      (2).对于.NET对如加密算法的说明如下表:

算法名称

算法说明

DES加密算法 采用的是分组加密方式,使用56位密钥加密64位明文,最后产生64位密文
3DES加密算法 采用168位的密钥,三重加密,速度比较的慢
TripleDES加密算法 用两个密钥对数据进行3次加密/解密运算
RC2加密算法 运用密钥长度可变,对明文采取64位分组加密
RC4加密算法 运用一个密钥长度可变的面向字节流的加密算法,以随机置换为基础
RC5加密算法 运用一种分组长度、密钥长度、加密迭代轮数都可变的分组加密算法。(包含密钥扩展、加密算法、解密算法)
RC6加密算法 RC6继承了RC5的循环移位思想,RC6是输入的明文由原先2个区扩展为4个块区
Rijndael加密算法 运用反复运算的加密算法,允许数据区块及密钥的长度可变。数据区块与密钥长度的变动时各自独立的

   2.DotNet对准如加密着力目标解析:

     在.NET中针对称算法的层次结构如下图:

大红鹰葡京会 5

   2.DotNet对准如加密核心目标解析:

     在.NET中针对称算法的层次结构如下图:

大红鹰葡京会 6

      Ⅰ.SymmetricAlgorithm类解析:

         
SymmetricAlgorithm类允许配置一个算法(选择尺寸,填充模式)并创立加密及解密数据的实例;不可知动用该类和导出实现类似来种直接处理多少。接下来我们切实了解一下SymmetricAlgorithm类的一些方以及性。该类是一个抽象类,是怀有对如加密算法基类。在采用着生类时,如果只有以用完对象后劫持垃圾回收是不够的,需要对拖欠目标出示的调用clear方法,以便在出狱对象之前将对象中所蕴涵的持有敏感数据清除。

         (1).IV属性:获取或安装对称算法的初始化向量。

  public virtual byte[] IV
    {
      get
      {
        if (this.IVValue == null)
          this.GenerateIV();
        return (byte[]) this.IVValue.Clone();
      }
      set
      {
        if (value == null)
          throw new ArgumentNullException("value");
        if (value.Length != this.BlockSizeValue / 8)
          throw new CryptographicException(Environment.GetResourceString("Cryptography_InvalidIVSize"));
        this.IVValue = (byte[]) value.Clone();
      }
    }

   
该属于以字节数组的花样表示Key,该属性具有get和set属性,表明该属性是只是读而写的,该属性也虚属性,可以于子类中重写。Key属性是用来博或设置对称算法的密钥,密钥即可使被加密啊得下让解密。

   (2).LegalBlockSizes属性: 获取对称算法支持之片大小(以各类为单位)。

 public virtual KeySizes[] LegalBlockSizes
    {
      get
      {
        return (KeySizes[]) this.LegalBlockSizesValue.Clone();
      }
    }

  该属性为虚属性,在子类中但是又写,该属性是只念属性。

    (3).Create()方法:创建用于实施针对称算法的指定加密对象。

public static SymmetricAlgorithm Create(string algName)
    {
      return (SymmetricAlgorithm) CryptoConfig.CreateFromName(algName);
    }

 
 该法CryptoConfig.CreateFromName()方法在前边一篇介绍了,在此处就非做具体的介绍,Create()接收一个SymmetricAlgorithm类型的字符串参数,指定本次System.Security.Cryptography.SymmetricAlgorithm字符串。

   (4).Mode属性:获取或安装对称算法的演算模式。

 public virtual CipherMode Mode
    {
      get
      {
        return this.ModeValue;
      }
      set
      {
        if (value < CipherMode.CBC || CipherMode.CFB < value)
          throw new CryptographicException(Environment.GetResourceString("Cryptography_InvalidCipherMode"));
        this.ModeValue = value;
      }
    }

 
 该属性是一个虚属性,获取与装置密码代码,拉取准备数据,由代码可以观看,该属性含有一个枚举类型CipherMode,我们接下了解一下此枚举类型:

     CipherMode枚举类型:指定用于加密的片加密模式。

    [ComVisible(true)]
    public enum CipherMode
    {
        CBC = 1,
        ECB = 2,
        OFB = 3,
        CFB = 4,
        CTS = 5
    }

 
 CBC(密码块链):该模式引入类举报;ECB(电子密码本):该模式分别加密每个片;OFB(输出反馈):该模式将少量递增的纯粹文本处理改成为密码文本,而非是为这个处理整个片;CFB(密码反馈):该模式将少量递增的纯文本处理成密码文本,而非是均等不好拍卖任何片;CTS(密码文本窃用):该模式处理任何长度的纯文本并生长度和纯文本长度匹配的密码文本。

   (5).Padding属性: 获取或设置对称算法中动用的填充模式。

public virtual PaddingMode Padding
    {
      get
      {
        return this.PaddingValue;
      }
      set
      {
        if (value < PaddingMode.None || PaddingMode.ISO10126 < value)
          throw new CryptographicException(Environment.GetResourceString("Cryptography_InvalidPaddingMode"));
        this.PaddingValue = value;
      }
    }

   该属性是针对称算法中使用的填写模式,默认值为
PKCS7。该属性可读而写,填充数据的有的片。由该属性可知一个枚举类型PaddingMode。

   
 PaddingMode枚举:指定当消息数据块较短时如果动用的填写类型,比加密操作所急需的通许节数。

    [ComVisible(true)]
    public enum PaddingMode
    {
        None = 1,
        PKCS7 = 2,
        Zeros = 3,
        ANSIX923 = 4,
        ISO10126 = 5
    }

     该枚举类型有5单成员, None = 1:不填充;PKCS7 =
2:PKCS#7填充字符串由字节序列组成,每个字节都是当添加的填充充字节的总和; Zeros
= 3:填充字符串由设置也零星之字节组成; ANSIX923 = 4:ANSI X
923填写充字符串由长前面填充零的字节序列组成;ISO10126 =
5:ISO10126填充字符串由长之前的即兴数据整合。

      Ⅰ.SymmetricAlgorithm类解析:

         
SymmetricAlgorithm类允许配置一个算法(选择尺寸,填充模式)并创加密与解密数据的实例;不可知用该类和导出实现类似来种直接处理多少。接下来我们切实了解一下SymmetricAlgorithm类的组成部分方以及性能。该类是一个抽象类,是怀有对如加密算法基类。在运用着生类时,如果单独于用完对象后劫持垃圾回收是不够的,需要针对拖欠目标出示的调用clear方法,以便在出狱对象之前用目标中所富含的兼具敏感数据清除。

         (1).IV属性:获取或设置对称算法的初始化向量。

  public virtual byte[] IV
    {
      get
      {
        if (this.IVValue == null)
          this.GenerateIV();
        return (byte[]) this.IVValue.Clone();
      }
      set
      {
        if (value == null)
          throw new ArgumentNullException("value");
        if (value.Length != this.BlockSizeValue / 8)
          throw new CryptographicException(Environment.GetResourceString("Cryptography_InvalidIVSize"));
        this.IVValue = (byte[]) value.Clone();
      }
    }

   
该属于使用字节数组的花样表示Key,该属性具有get和set属性,表明该属性是不过读而写的,该属性为虚属性,可以当子类中重写。Key属性是因此来获取或安装对称算法的密钥,密钥即可使用让加密为可采取于解密。

   (2).LegalBlockSizes属性: 获取对称算法支持的块大小(以各也单位)。

 public virtual KeySizes[] LegalBlockSizes
    {
      get
      {
        return (KeySizes[]) this.LegalBlockSizesValue.Clone();
      }
    }

  该属性也虚属性,在子类中而更写,该属性是不过读属性。

    (3).Create()方法:创建用于实践对称算法的指定加密对象。

public static SymmetricAlgorithm Create(string algName)
    {
      return (SymmetricAlgorithm) CryptoConfig.CreateFromName(algName);
    }

 
 该措施CryptoConfig.CreateFromName()方法在前方一首介绍了,在此虽无举行实际的牵线,Create()接收一个SymmetricAlgorithm类型的字符串参数,指定本次System.Security.Cryptography.SymmetricAlgorithm字符串。

   (4).Mode属性:获取或设置对称算法的运算模式。

 public virtual CipherMode Mode
    {
      get
      {
        return this.ModeValue;
      }
      set
      {
        if (value < CipherMode.CBC || CipherMode.CFB < value)
          throw new CryptographicException(Environment.GetResourceString("Cryptography_InvalidCipherMode"));
        this.ModeValue = value;
      }
    }

 
 该属性是一个虚属性,获取和装置密码代码,拉取准备数据,由代码可以看看,该属性含有一个枚举类型CipherMode,我们对接下去了解一下斯枚举类型:

     CipherMode枚举类型:指定用于加密的块加密模式。

    [ComVisible(true)]
    public enum CipherMode
    {
        CBC = 1,
        ECB = 2,
        OFB = 3,
        CFB = 4,
        CTS = 5
    }

 
 CBC(密码块链):该模式引入类举报;ECB(电子密码本):该模式分别加密每个片;OFB(输出反馈):该模式将少量递增的纯文本处理改成为密码文本,而无是以这处理整个片;CFB(密码反馈):该模式将少量递增的纯粹文本处理成密码文本,而无是一样次拍卖任何片;CTS(密码文本窃用):该模式处理其他长度的纯文本并产生长度以及纯文本长度匹配的密码文本。

   (5).Padding属性: 获取或安装对称算法中应用的填写模式。

public virtual PaddingMode Padding
    {
      get
      {
        return this.PaddingValue;
      }
      set
      {
        if (value < PaddingMode.None || PaddingMode.ISO10126 < value)
          throw new CryptographicException(Environment.GetResourceString("Cryptography_InvalidPaddingMode"));
        this.PaddingValue = value;
      }
    }

   该属性是对准称算法中行使的填充模式,默认值为
PKCS7。该属性可读而写,填充数据的局部块。由该属性可知一个枚举类型PaddingMode。

   
 PaddingMode枚举:指定当消息数据块较短时只要运之填充类型,比加密操作所要的整套配节数。

    [ComVisible(true)]
    public enum PaddingMode
    {
        None = 1,
        PKCS7 = 2,
        Zeros = 3,
        ANSIX923 = 4,
        ISO10126 = 5
    }

     该枚举类型有5只分子, None = 1:不填充;PKCS7 =
2:PKCS#7填充字符串由字节序列组成,每个字节都是当添加的填充字节的总额; Zeros
= 3:填充字符串由安为零星的字节组成; ANSIX923 = 4:ANSI X
923填写充字符串由长前面填充零的字节序列组成;ISO10126 =
5:ISO10126填充字符串由长之前的妄动数据做。

   Ⅱ.ICryptoTransform:

     
ICryptoTransform定义基本的加密易运算,该接口的实例可以以文纯文本转化成加密文书,或者用加密文本转化为纯文本,每一个ICryptoTransform都是特为的,只能让用来其创造的目的。该接口的性能和办法如下:

    /// <summary>
    /// 获取输入块大小。
    /// </summary>
    int InputBlockSize { get; }
    /// <summary>
    /// 获取输出块大小。
    /// </summary>
    int OutputBlockSize { get; }
    /// <summary>
    /// 获取一个值,该值指示是否可以转换多个块。
    /// </summary>
    bool CanTransformMultipleBlocks { get; }
    /// <summary>
    /// 获取一个值,该值指示是否可重复使用当前转换。
    /// </summary>
    bool CanReuseTransform { get; }
    /// <summary>
    /// 转换输入字节数组的指定区域,并将所得到的转换复制到输出字节数组的指定区域。
    /// </summary>
    int TransformBlock(byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset);
    /// <summary>
    /// 转换指定字节数组的指定区域。
    /// </summary>
 byte[] TransformFinalBlock(byte[] inputBuffer, int inputOffset, int inputCount);

 
  ICryptoTransform接口实例并无克动用于自己,.NET提供了CryptoStream类,定义将数据流链接到加密转换的流淌。创建CryptoStream的实例需要一个真实流、ICryptoTransform、CryptoStreamMode枚举的价。

   Ⅱ.ICryptoTransform:

     
ICryptoTransform定义基本的加密移运算,该接口的实例可以将文纯文本转化成为加密文件,或者以加密文本转化为纯文本,每一个ICryptoTransform都是只是为的,只能被用来其创建的目的。该接口的属性与措施如下:

    /// <summary>
    /// 获取输入块大小。
    /// </summary>
    int InputBlockSize { get; }
    /// <summary>
    /// 获取输出块大小。
    /// </summary>
    int OutputBlockSize { get; }
    /// <summary>
    /// 获取一个值,该值指示是否可以转换多个块。
    /// </summary>
    bool CanTransformMultipleBlocks { get; }
    /// <summary>
    /// 获取一个值,该值指示是否可重复使用当前转换。
    /// </summary>
    bool CanReuseTransform { get; }
    /// <summary>
    /// 转换输入字节数组的指定区域,并将所得到的转换复制到输出字节数组的指定区域。
    /// </summary>
    int TransformBlock(byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset);
    /// <summary>
    /// 转换指定字节数组的指定区域。
    /// </summary>
 byte[] TransformFinalBlock(byte[] inputBuffer, int inputOffset, int inputCount);

 
  ICryptoTransform接口实例并无能够用让自己,.NET提供了CryptoStream类,定义将数据流链接到加密转换的流动。创建CryptoStream的实例需要一个真实流、ICryptoTransform、CryptoStreamMode枚举的价值。

三.DotNet对如加密实例:

三.DotNet对如加密实例:

   1.DES算法加密实例:

        /// <summary> 
        /// 加密数据 
        /// </summary> 
        /// <param name="text"></param> 
        /// <param name="sKey"></param> 
        /// <returns></returns> 
        public static string Encrypt(string text, string sKey)
        {
            if (string.IsNullOrEmpty(text))
            {
                throw new ArgumentNullException(text);
            }
            if (string.IsNullOrEmpty(sKey))
            {
                throw new ArgumentNullException(sKey);
            }
            MemoryStream ms = null;
            DESCryptoServiceProvider des = null;
            try
            {
                des = new DESCryptoServiceProvider();
                var inputByteArray = Encoding.Default.GetBytes(text);
                var bKey = Encoding.ASCII.GetBytes(Md5Hash(sKey).Substring(0, 8));
                des.Key = bKey;
                des.IV = bKey;
                ms = new MemoryStream();
                var cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
                cs.Write(inputByteArray, 0, inputByteArray.Length);
                cs.FlushFinalBlock();
                var ret = new StringBuilder();
                foreach (byte b in ms.ToArray())
                {
                    ret.AppendFormat("{0:X2}", b);
                }
                return ret.ToString();
            }
            catch (NotSupportedException nsex)
            {
                throw nsex;
            }
            catch (ArgumentNullException arnex)
            {
                throw arnex;
            }
            catch (EncoderFallbackException efex)
            {
                throw efex;
            }
            catch (ArgumentException arex)
            {
                throw arex;
            }
            catch (CryptographicException crex)
            {
                throw crex;
            }
            finally
            {
                if (ms != null)
                {
                    ms.Close();
                }
                if (des != null)
                {
                    des.Clear();
                }
            }
        }

   1.DES算法加密实例:

        /// <summary> 
        /// 加密数据 
        /// </summary> 
        /// <param name="text"></param> 
        /// <param name="sKey"></param> 
        /// <returns></returns> 
        public static string Encrypt(string text, string sKey)
        {
            if (string.IsNullOrEmpty(text))
            {
                throw new ArgumentNullException(text);
            }
            if (string.IsNullOrEmpty(sKey))
            {
                throw new ArgumentNullException(sKey);
            }
            MemoryStream ms = null;
            DESCryptoServiceProvider des = null;
            try
            {
                des = new DESCryptoServiceProvider();
                var inputByteArray = Encoding.Default.GetBytes(text);
                var bKey = Encoding.ASCII.GetBytes(Md5Hash(sKey).Substring(0, 8));
                des.Key = bKey;
                des.IV = bKey;
                ms = new MemoryStream();
                var cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
                cs.Write(inputByteArray, 0, inputByteArray.Length);
                cs.FlushFinalBlock();
                var ret = new StringBuilder();
                foreach (byte b in ms.ToArray())
                {
                    ret.AppendFormat("{0:X2}", b);
                }
                return ret.ToString();
            }
            catch (NotSupportedException nsex)
            {
                throw nsex;
            }
            catch (ArgumentNullException arnex)
            {
                throw arnex;
            }
            catch (EncoderFallbackException efex)
            {
                throw efex;
            }
            catch (ArgumentException arex)
            {
                throw arex;
            }
            catch (CryptographicException crex)
            {
                throw crex;
            }
            finally
            {
                if (ms != null)
                {
                    ms.Close();
                }
                if (des != null)
                {
                    des.Clear();
                }
            }
        }

    2.DES算法解密实例:

        /// <summary> 
        /// 解密数据 
        /// </summary> 
        /// <param name="text"></param> 
        /// <param name="sKey"></param> 
        /// <returns></returns> 
        public static string Decrypt(string text, string sKey)
        {
            if (string.IsNullOrEmpty(text))
            {
                throw new ArgumentNullException(text);
            }
            if (string.IsNullOrEmpty(sKey))
            {
                throw new ArgumentNullException(sKey);
            }
            MemoryStream ms = null;
            DESCryptoServiceProvider des = null;
            try
            {
                des = new DESCryptoServiceProvider();
                var len = text.Length / 2;
                byte[] inputByteArray = new byte[len];
                int x;
                for (x = 0; x < len; x++)
                {
                    var i = Convert.ToInt32(text.Substring(x * 2, 2), 16);
                    inputByteArray[x] = (byte)i;
                }
                var bKey = Encoding.ASCII.GetBytes(Md5Hash(sKey).Substring(0, 8));
                des.Key = bKey;
                des.IV = bKey;
                ms = new MemoryStream();
                CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
                cs.Write(inputByteArray, 0, inputByteArray.Length);
                cs.FlushFinalBlock();
                return Encoding.Default.GetString(ms.ToArray());
            }
            catch (NotSupportedException nsex)
            {
                throw nsex;
            }
            catch (ArgumentNullException arnex)
            {
                throw arnex;
            }
            catch (EncoderFallbackException efex)
            {
                throw efex;
            }
            catch (ArgumentException arex)
            {
                throw arex;
            }
            catch (CryptographicException crex)
            {
                throw crex;
            }
            finally
            {
                if (ms != null)
                {
                    ms.Close();
                }
                if (des != null)
                {
                    des.Clear();
                }
            }
        }

    2.DES算法解密实例:

        /// <summary> 
        /// 解密数据 
        /// </summary> 
        /// <param name="text"></param> 
        /// <param name="sKey"></param> 
        /// <returns></returns> 
        public static string Decrypt(string text, string sKey)
        {
            if (string.IsNullOrEmpty(text))
            {
                throw new ArgumentNullException(text);
            }
            if (string.IsNullOrEmpty(sKey))
            {
                throw new ArgumentNullException(sKey);
            }
            MemoryStream ms = null;
            DESCryptoServiceProvider des = null;
            try
            {
                des = new DESCryptoServiceProvider();
                var len = text.Length / 2;
                byte[] inputByteArray = new byte[len];
                int x;
                for (x = 0; x < len; x++)
                {
                    var i = Convert.ToInt32(text.Substring(x * 2, 2), 16);
                    inputByteArray[x] = (byte)i;
                }
                var bKey = Encoding.ASCII.GetBytes(Md5Hash(sKey).Substring(0, 8));
                des.Key = bKey;
                des.IV = bKey;
                ms = new MemoryStream();
                CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
                cs.Write(inputByteArray, 0, inputByteArray.Length);
                cs.FlushFinalBlock();
                return Encoding.Default.GetString(ms.ToArray());
            }
            catch (NotSupportedException nsex)
            {
                throw nsex;
            }
            catch (ArgumentNullException arnex)
            {
                throw arnex;
            }
            catch (EncoderFallbackException efex)
            {
                throw efex;
            }
            catch (ArgumentException arex)
            {
                throw arex;
            }
            catch (CryptographicException crex)
            {
                throw crex;
            }
            finally
            {
                if (ms != null)
                {
                    ms.Close();
                }
                if (des != null)
                {
                    des.Clear();
                }
            }
        }

四.总结:

   
这篇博文主要谈解.NET的相得益彰加密方法,从常理上教学和源码分析,以及供了对应的实例,辅助我们失去领略加密。如发生不当与不足之处,欢迎评批指正。

 

四.总结:

   
这篇博文主要讲解.NET的相辅相成加密方法,从常理上上课和源码分析,以及供了相应的实例,辅助我们去领略加密。如有误以及不足之处,欢迎评批指正。

 

加密算法系列:

     
 DotNet加密方法分析–散列加密:http://www.cnblogs.com/pengze0902/p/6268700.html

     
 DotNet加密方法分析–对如加密:http://www.cnblogs.com/pengze0902/p/6268702.html

     
 DotNet加密方法分析–数字签名:http://www.cnblogs.com/pengze0902/p/6268709.html

     
 DotNet加密方法分析–非对如加密:http://www.cnblogs.com/pengze0902/p/6268705.html

加密算法系列:

     
 DotNet加密方法分析–散列加密:http://www.cnblogs.com/pengze0902/p/6268700.html

     
 DotNet加密方法分析–对如加密:http://www.cnblogs.com/pengze0902/p/6268702.html

     
 DotNet加密方法分析–数字签名:http://www.cnblogs.com/pengze0902/p/6268709.html

     
 DotNet加密方法分析–非对如加密:http://www.cnblogs.com/pengze0902/p/6268705.html

相关文章

admin

网站地图xml地图