当前位置:澳门新萄京网址 > 澳门新萄京网址 > DotNet加密方式解析

DotNet加密方式解析

文章作者:澳门新萄京网址 上传时间:2019-10-23

四.总结:

    以上介绍了散列算法在.NET的应用和法则,希望能够帮到一些人,纵然小说中有写的荒诞和不到位之处,还望大家多多商酌指正。

  友情增多四个加密的helper方法:

 

少年老成.DotNet散列算法概述:

   谈到散列应该都不会面生,而且首先都会想到MD5加密,不过对于散列更参预木七分的摸底,可能知道的人就不会那么多了。散列算法创设了二个散列码,也称之为“音信摘要”或“音讯指纹”,看见“新闻指纹”这一个词,小编首先想到的是足以唯风流倜傥识别三个音讯或然说能够唯大器晚成的标记一位。

加密算法类别:

       DotNet加密方法剖析--散列加密:

       DotNet加密方法解析--对称加密:

       DotNet加密方法剖析--数字具名:

       DotNet加密方法分析--非对称加密:

   1.SHA1算法实例:

   public static string GetSha1(string str)
        {
            if (string.IsNullOrEmpty(str))
            {
                throw new ArgumentNullException(str);
            }
            try
            {
                //建立SHA1对象
                SHA1 sha = new SHA1CryptoServiceProvider();
                //将mystr转换成byte[] 
                var enc = new ASCIIEncoding();
                var dataToHash = enc.GetBytes(str);
                //Hash运算
                var dataHashed = sha.ComputeHash(dataToHash);
                //将运算结果转换成string
                var hash = BitConverter.ToString(dataHashed).Replace("-", "");
                return hash;
            }
            catch (ArgumentNullException ex)
            {
                throw ex;
            }
            catch (ArgumentException arex)
            {
                throw arex;
            }
            catch (ObjectDisposedException obex)
            {
                throw obex;
            }

二.DotNet散列算法应用剖判:

   以上对散列算法,以致散列算法在.NET中分类做了二个归纳的介绍,接下去大家具体看一下再.NET中贯彻那三种散列算法的类。

   在.NET中System.Security.Cryptography命名空间下的HashAlgorithm类,表示具有加密哈希算法达成均必需从当中派生的基类。犹如下类结构:

图片 1

   在.NET中有三种档案的次序的落到实处类,四个是以“Managed”结尾,那几个类都被写入托管.NET语言,大器晚成种是以“CryptoServiceProvider”结尾,那一个类是依赖Windows CryptoAPI的。接下来大家切实的垂询一下HashAlgorithm类的一些措施:

三.DotNet散列算法达成实例:

   以上介绍在.NET下的散列加密的重要类,接下去看一下MD5的切实落到实处代码:

  /// <summary>
  /// 表示 MD5哈希算法的所有实现均从中继承的抽象类。
  /// </summary>
  [ComVisible(true)]
  public abstract class MD5 : HashAlgorithm
  {
    /// <summary>
    /// 初始化 MD5 的新实例。
    /// </summary>
    protected MD5()
    {
      this.HashSizeValue = 128;
    }

    /// <summary>
    /// 创建MD5 哈希算法的默认实现的实例。
    /// </summary>
    /// <returns>
    /// <see cref="T:System.Security.Cryptography.MD5"/> 哈希算法的新实例。
    /// </returns>   
    public static MD5 Create()
    {
      return MD5.Create("System.Security.Cryptography.MD5");
    }

    /// <summary>
    /// 创建MD5 哈希算法的指定实现的实例。
    /// </summary> 
    /// <returns>
    public static MD5 Create(string algName)
    {
      return (MD5) CryptoConfig.CreateFromName(algName);
    }
  }

   由上述的代码可以看住,在MD5类中,具体的达成情势都以由HashAlgorithm类的Create方法达成,在那地就不再做牵线。

   那一回将会重视疏解.NET的加密方法,接下去将会独家介绍散列加密,对称加密,非对称加密等等加密方法在.NET中的应用,本文首要教师散列加密在.NET中的应用实例。

   1.散列算法原理概述:

 散列算法的着力是一个数学函数,在八个定位大小的多少块中运作它能够创设二个散列码。在散列算法中要求钦定二个“种子值”,该值和第一块新闻数据一起载入散列函数那就生成了第二个散列码,依据上一步的艺术,散列码依次进入下一个散列函数运算,最终获得散列码,如下图所示:

   图片 2

   散列码是行使双重调用散列函数的链创制的,散列码注重于消息的单个位的值。散列函数是因此操作两块固定长度的二进制数据来生成散列码,散列算法则描述类应用散列函数为音信创设散列码的长河,散列算法是利用散列函数的磋商,钦点类怎样分解音讯及怎么样链接早先音讯快产生的结果。散列码的长短也存有限制,散列码长度较长时,须求的破解时间就能较长,这便是暴力破解的秘籍,不过散列码较长,生成散列码的年华便是比较长,任何政策都以供给付出代价的。

   2.DotNet的散列算法体系:

    在.NET中,常用的散列算法系列有如下二种:

图片 3

    在上述列举的两种散列算法中,MD5是.NET含有的最快的散列算法。若是基础算法反常,越长的散列码并不一定能够提供越好的平安。

   在现代社会中,音信安全对于每壹个人都以尤为重要的,举个例子大家的银行账户安全、支付宝和微信账户安全、以致邮箱等等,提起音信安全,那就必需得提到加密本领,至于加密的有的连锁概念,在那地就隐蔽了。

   2.MD5加密实例:

  /// <summary>
        /// 32位大写
        /// </summary>
        /// <returns></returns>
        public static string Upper32(string s)
        {
            var hashPasswordForStoringInConfigFile = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(s, "md5");
            if (hashPasswordForStoringInConfigFile != null)
                s = hashPasswordForStoringInConfigFile;
            return s.ToUpper();
        }

        /// <summary>
        /// 32位小写
        /// </summary>
        /// <returns></returns>
        public static string Lower32(string s)
        {
            var hashPasswordForStoringInConfigFile = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(s, "md5");
            if (hashPasswordForStoringInConfigFile != null)
                s = hashPasswordForStoringInConfigFile;
            return s.ToLower();
        }

        /// <summary>
        /// 16位大写
        /// </summary>
        /// <returns></returns>
        public static string Upper16(string s)
        {
            var hashPasswordForStoringInConfigFile = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(s, "md5");
            if (hashPasswordForStoringInConfigFile != null)
                s = hashPasswordForStoringInConfigFile.ToString();
            return s.ToUpper().Substring(8, 16);
        }

        /// <summary>
        /// 16位小写
        /// </summary>
        /// <returns></returns>
        public static string Lower16(string s)
        {
            var hashPasswordForStoringInConfigFile = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(s, "md5");
            if (hashPasswordForStoringInConfigFile != null)
                s = hashPasswordForStoringInConfigFile.ToString();
            return s.ToLower().Substring(8, 16);
        }

   1.HashAlgorithm类主意和质量深入分析:

     (1).Hash属性:获取计算机手艺商量所得的哈希代码的值。

public virtual byte[] Hash
    {
      get
      {
        if (this.m_bDisposed)
          throw new ObjectDisposedException((string) null);
        if (this.State != 0)
          throw new CryptographicUnexpectedOperationException(Environment.GetResourceString("Cryptography_HashNotYetFinalized"));
        return (byte[]) this.HashValue.Clone();
      }
    }

  该属性重回类Computer的散列码值,该属性是二个字节数组,由代码可以观察该属性是只读的,重临计算机能力切磋所得的哈希代码的近年来值。

     (2).Create()方法:成立哈希算法的钦点达成的实例。

  public static HashAlgorithm Create(string hashName)
    {
      return (HashAlgorithm) CryptoConfig.CreateFromName(hashName);
    }

     由代码可以知道,内定哈希算法的新实例,若是hashName不是有效哈希算法,则为 null,该措施运用名称创造三个HashAlgorithm对象的新实例。

     (3).ComputeHash()方法:从字节数组和数量流中制造散列码。

 public byte[] ComputeHash(byte[] buffer)
    {
      if (this.m_bDisposed)
        throw new ObjectDisposedException((string) null);
      if (buffer == null)
        throw new ArgumentNullException("buffer");
      this.HashCore(buffer, 0, buffer.Length);
      this.HashValue = this.HashFinal();
      byte[] numArray = (byte[]) this.HashValue.Clone();
      this.Initialize();
      return numArray;
    }

   以上是ComputeHash()方法的三个重载版本,使用字节数组来创设一个散列码,该措施重返七个字节数组,该数组含有消息数据的散列码。HashCore()将写入对象的数据路由到哈希算法以总计哈希值,HashFinal()在加密流对象管理完最终的数额后产生哈希总计。

   2.HMAC类: 表示依照哈希的音信证实代码 (HMAC) 的兼具完结必得从当中派生的抽象类。

     创造加密散列码(音讯验证码MACs)有二种方式:

       第黄金年代种:先合併类密钥和音讯数据,再利用普通的加密散列算法来为该并集创设散列码。常用的是HMAC规范。

       第三种:使用对称算法来加密音信数据,除了最终叁人之外,全体的加密数据位都将被吐弃。

   HMAC规范制定了怎么着联合音信数据和密钥,可是并未有一些名相应使用这种散列算法来创立散列码,那也就象征该典型能够行使于此外算法。

    (1).Key属性:获取或安装用于哈希算法的密钥。

 public override byte[] Key
    {
      get
      {
        return (byte[]) this.KeyValue.Clone();
      }
      set
      {
        if (this.m_hashing)
          throw new CryptographicException(Environment.GetResourceString("Cryptography_HashKeySet"));
        this.InitializeKey(value);
      }
    }

   该属性在这里边展开类重写,该属性是贰个字节数组,属性可读写。

    (2).Create()方法:创制基于哈希的音信证实代码 (HMAC) 钦命达成的实例。

public static HMAC Create(string algorithmName)
    {
      return (HMAC) CryptoConfig.CreateFromName(algorithmName);
    }

   该措施钦命的 HMAC 达成的新实例,该方式跟HashAlgorithm类的Create方法雷同,这里就不做深切的深入分析。

    (3).HashCore()方法:将写入对象的数据路由给暗中认可 HMAC 哈希算法以计算哈希值。

  protected override void HashCore(byte[] rgb, int ib, int cb)
    {
      if (!this.m_hashing)
      {
        this.m_hash1.TransformBlock(this.m_inner, 0, this.m_inner.Length, this.m_inner, 0);
        this.m_hashing = true;
      }
      this.m_hash1.TransformBlock(rgb, ib, cb, rgb, ib);
    }

   该办法在这里边被重写,将写入对象的数据路由给暗中同意 HMAC 哈希算法以总括哈希值。TransformBlock()总计输入字节数组的钦赐区域的哈希值,将输入字节数组的钦点区域复制到钦命的区域,输出字节数组。

   没时间聊天了,赶紧上车啊。

本文由澳门新萄京网址发布于澳门新萄京网址,转载请注明出处:DotNet加密方式解析

关键词: