DotNet加密方式解析

澳门新葡萄京所有网站 1

    2.数字签字的表征:

      第三方无法伪造顾客A的数字签字;第三方无法重新使用客商A的数字具名;第三方无法改换签字后的文书;客户A无法否认本身的具名文件。数字具名能够提供一种和物理签字类似的客观编写制定。数字署名的安全性和加密的另外方面是一模一样的,他们都以基于恐怕的有效性密钥管理的。数字签字只使用了非对称密钥加密算法,能确定保证发送新闻的完整性、身份验证和不可以矢口抵赖行,数字加密应用了对称密钥加密算法和非对称密钥加密算法相结合的章程,能够保险发送信息的保密性。

    4.X509Certificate类解析:

        该类在System.Security.Cryptography.X509Certificates空间下,提供增派你利用 X.509 v.3 证书的点子。

      (1).LoadCertificateFromBlob():加载证书:

private void LoadCertificateFromBlob(byte[] rawData, object password, X509KeyStorageFlags keyStorageFlags)
    {
      if (rawData == null || rawData.Length == 0)
        throw new ArgumentException(Environment.GetResourceString("Arg_EmptyOrNullArray"), "rawData");
      if (X509Utils.MapContentType(X509Utils._QueryCertBlobType(rawData)) == X509ContentType.Pfx && (keyStorageFlags & X509KeyStorageFlags.PersistKeySet) == X509KeyStorageFlags.PersistKeySet)
        new KeyContainerPermission(KeyContainerPermissionFlags.Create).Demand();
      uint dwFlags = X509Utils.MapKeyStorageFlags(keyStorageFlags);
      IntPtr num = IntPtr.Zero;
      RuntimeHelpers.PrepareConstrainedRegions();
      try
      {
        num = X509Utils.PasswordToHGlobalUni(password);
        X509Utils._LoadCertFromBlob(rawData, num, dwFlags, (keyStorageFlags & X509KeyStorageFlags.PersistKeySet) != X509KeyStorageFlags.DefaultKeySet, ref this.m_safeCertContext);
      }
      finally
      {
        if (num != IntPtr.Zero)
          Marshal.ZeroFreeGlobalAllocUnicode(num);
      }
    }

   该办法是X509Certificate类构造函数等多少个章程加载证书的现实性达成格局。

      (2).Export():使用钦定的格式和密码将近期X509Certificate对象导出到字节数组。

 public virtual byte[] Export(X509ContentType contentType, SecureString password)
    {
      return this.ExportHelper(contentType, (object) password);
    }

        该形式接受五个参数,contentType描述怎么样设置输出数据格式的 X509ContentType 值之一。password访谈 X.509 证书数据所需的密码。再次回到表示近些日子 X509Certificate 对象的字节数组。

    数据安全的相干技巧在现今更进一竿变得主要,因为大家对于笔者的消息皆有一种保护的欲望,不想被人拿走到温馨的私密音信,加密大致已是以此时代的重中之重词了。在这里个HTTPS盛行的时期,作为一个开采职员怎么恐怕不去打听和上学啊。那篇博文就来给大家简要介绍一个HTTPS在.NET种的行使和实现方式。

四.DotNet数字具名实例:

    上边提供贰个X509Certificate的操作方法实例:

  public void EncryptXmlDocument(string arqXmlAssinar, string tagAssinatura, string tagAtributoId, X509Certificate2 x509Cert)
        {
            StreamReader sr = null;
            try
            {
                sr = System.IO.File.OpenText(arqXmlAssinar);
                var xmlString = sr.ReadToEnd();
                sr.Close();
                sr = null;
                XmlDocument doc = new XmlDocument { PreserveWhitespace = false };
                doc.LoadXml(xmlString);
                if (doc.GetElementsByTagName(tagAssinatura).Count == 0)
                {
                    throw new Exception(tagAssinatura.Trim());
                }
                if (doc.GetElementsByTagName(tagAtributoId).Count == 0)
                {
                    throw new Exception(tagAtributoId.Trim());
                }
                XmlNodeList lists = doc.GetElementsByTagName(tagAssinatura);
                foreach (XmlNode nodes in lists)
                {
                    foreach (XmlNode childNodes in nodes.ChildNodes)
                    {
                        if (!childNodes.Name.Equals(tagAtributoId))
                            continue;
                        if (childNodes.NextSibling != null && childNodes.NextSibling.Name.Equals("Signature"))
                            continue;
                        Reference reference = new Reference { Uri = "" };                                 
                        XmlElement childElemen = (XmlElement)childNodes;
                        if (childElemen.GetAttributeNode("Id") != null)
                        {
                            var attributeNode = childElemen.GetAttributeNode("Id");
                            if (attributeNode != null)
                                reference.Uri = "#" + attributeNode.Value;
                        }
                        else if (childElemen.GetAttributeNode("id") != null)
                        {
                            var attributeNode = childElemen.GetAttributeNode("id");
                            if (attributeNode != null)
                                reference.Uri = "#" + attributeNode.Value;
                        }
                        XmlDocument documentoNovo = new XmlDocument();
                        documentoNovo.LoadXml(nodes.OuterXml);
                        SignedXml signedXml = new SignedXml(documentoNovo) { SigningKey = x509Cert.PrivateKey };
                        XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform();
                        reference.AddTransform(env);
                        XmlDsigC14NTransform c14 = new XmlDsigC14NTransform();
                        reference.AddTransform(c14);
                        signedXml.AddReference(reference);
                        KeyInfo keyInfo = new KeyInfo();
                        keyInfo.AddClause(new KeyInfoX509Data(x509Cert));
                        signedXml.KeyInfo = keyInfo;
                        signedXml.ComputeSignature();
                        XmlElement xmlDigitalSignature = signedXml.GetXml();
nodes.AppendChild(doc.ImportNode(xmlDigitalSignature, true));
                    }
                }
                var xmlDoc = doc;
                var stringXmlAssinado = xmlDoc.OuterXml;
                StreamWriter sw2 = System.IO.File.CreateText(arqXmlAssinar);
                sw2.Write(stringXmlAssinado);
                sw2.Close();
            }
            catch (CryptographicException ex)
            {
                throw new CryptographicException(ex.Message);
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
            finally
            {
                if (sr != null) sr.Close();
            }
        }

    即刻快要度岁回乡里了,村里未有wifi,未有4G,未有流量,特别重点的是过几天计算机就得卖掉换车票了,得赶紧写几篇博客。

二.数字证书概述:

   对于HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer)相当多开垦职员都不会不熟悉,就算是普通顾客也是比较的耳濡目染。数字证书(公钥证书):用于电子音讯活动Hong Kong中华电力有限集团子文件行为主体的辨证和验证,并可达成电子文本保密性和完整性的电子数据。数字证书是一个经证书认证中央批发的证书。

   数字证书:个人数字证书,单位数字证书、单位职工数字证书、服务器证书、VPN证书、WAP证书、代码具名证书和表单签名证书等。

   数字证书是八个经证书授权重心数字具名的带有公开密钥具备者音信以至公开密钥的文件,最简易的申明包罗二个公开密钥、名称一剂证书授权主题的数字签字。

澳门新葡萄京所有网站,   数字证书的性状:音信的保密性;交易者身份的斐然;不可不可以认性、不可修改性。

   数字证书的二种保存格局:带有私钥的表明;二进制编码的证件;Base64编码证书。

加密算法连串:

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

       DotNet加密方法剖判--对称加密:

       DotNet加密方法分析--数字签字:

       DotNet加密方法剖判--非对称加密:

三.DotNet数字签字大旨目标深入分析:

     在.NET中包含三种辅助数字签字的非对称算法:EscortSA算法(为二种多少加密和数字具名定义了函数);DSA算法(扶植数字具名,不帮助数据加密)。在.NET中利用TucsonSA算法实行数字具名使用冠道SACrypto瑟维斯Provider类,使用DSA实行数字具名的七个基本类如下图:

澳门新葡萄京所有网站 2

   DSA类:数字签字算法DSA的基类;DSACryptoServiceProvider类:定义访谈DSA算法的加密服务提供程序完结的包装对象;DSASignature德福尔matter类:验证DSA签字;DSASignatureFormatter类:创立DSA签字;

   接下来大家具体了然一下那一个类:

     1.RSACryptoServiceProvider类:

        (1).SignData()方法:使用钦命的哈希算法总括钦赐输入流的哈希值,并对计算机技巧研讨所得的哈希值具名。

public byte[] SignData(Stream inputStream, object halg)
    {
      int calgHash = Utils.ObjToAlgId(halg, OidGroup.HashAlgorithm);
      return this.SignHash(Utils.ObjToHashAlgorithm(halg).ComputeHash(inputStream), calgHash);
    }

     该方法存在多个重载方法,四个重载方法的第多个参数区别,分别是Stream、byte[]多个等级次序。由代码能够见见,该方法接受五个参数,inputStream是要计算其哈希值的输入数据,halg用于成立哈希值的哈希算法。SignHash()通过用私钥对其张开加密来测算内定哈希值的签字。

        (2).VerifyData():通过应用提供的公钥分明具名中的哈希值并将其与所提供数据的哈希值进行比较印证数字签字是还是不是行得通。

 public bool VerifyData(byte[] buffer, object halg, byte[] signature)
    {
      int calgHash = Utils.ObjToAlgId(halg, OidGroup.HashAlgorithm);
      return this.VerifyHash(Utils.ObjToHashAlgorithm(halg).ComputeHash(buffer), calgHash, signature);
    }

    该方法未有重载版本,有源码能够看出该办法接收八个参数,分别是:buffer已签订公约的多少,halg用于成立数量的哈希值的哈希算法名称,signature要申明的签字数据。该办法再次来到三个布尔类型,假设具名有效,则为 true;不然为 false。VerifyHash()通过选拔提供的公钥分明具名中的哈希值并将其与提供的哈希值进行相比来表明数字具名是还是不是有效。

   2.DSA类解析:

     (1).CreateSignature():创造钦定数量的 Cryptography.DSA 签字。

 public abstract byte[] CreateSignature(byte[] rgbHash);

     该措施为三个抽象方法,在派生类中重写,接受壹个字节数组表示要具名的数量,重回钦点数量的数字签名。在行使CreateSignature方法时,必须和谐创设SHA-1散列码,重返二个用字节数组表示的DSA签字。

     (2).VerifySignature():验证内定数量的 Cryptography.DSA 具名。

public abstract bool VerifySignature(byte[] rgbHash, byte[] rgbSignature);

     该办法接受字符数组表示的SHA-1散列码和签名来验证。

    3.DSACryptoServiceProvider类解析:

     (1).ImportParameters():导入钦命的 DSAParameters。该措施接受贰个参数,Cryptography.DSA的参数。

     (2).VerifyData():通过将钦命的签字数据与为钦点数量总结的签字实行相比来证实钦赐的签订数据。

 public bool VerifyData(byte[] rgbData, byte[] rgbSignature)
    {
      return this.VerifyHash(this._sha1.ComputeHash(rgbData), (string) null, rgbSignature);
    }

      该措施接受三个参数,rgbData已签订左券的数据;rgbSignature要申明的签名数据,假设签字验证为有效,则为 true;否则,为 false。VerifyHash()通过将点名的签字数据与为内定哈希值总计的签订举行相比来注解钦赐的签订合同数据,大家看一下VerifyHash()的兑当代码:

 public bool VerifyHash(byte[] rgbHash, string str, byte[] rgbSignature)
    {
      if (rgbHash == null)
        throw new ArgumentNullException("rgbHash");
      if (rgbSignature == null)
        throw new ArgumentNullException("rgbSignature");
      int calgHash = X509Utils.NameOrOidToAlgId(str, OidGroup.HashAlgorithm);
      if (rgbHash.Length != this._sha1.HashSize / 8)
      {
        string key = "Cryptography_InvalidHashSize";
        object[] objArray = new object[2];
        int index1 = 0;
        string str1 = "SHA1";
        objArray[index1] = (object) str1;
        int index2 = 1;
        // ISSUE: variable of a boxed type
        __Boxed<int> local = (ValueType) (this._sha1.HashSize / 8);
        objArray[index2] = (object) local;
        throw new CryptographicException(Environment.GetResourceString(key, objArray));
      }
      this.GetKeyPair();
      return Utils.VerifySign(this._safeKeyHandle, 8704, calgHash, rgbHash, rgbSignature);
    }

     该办法接收多个参数,rgbHash要签字的数额的哈希值,str用于创立数量的哈希值的哈希算法名称,rgbSignature要注脚的签名数据。

    数字证书和数字具名的实现入眼是基于非对称加密和数字摘要,数字签字是数字证书非常重要的一局地。那篇博客首要教师数字签字、数字证书,以至数字签名在.NET种的落真实情形势。

   1.数字签字的基本原理:

      这里首先来打听部分怎么样叫做数字签名,数字签字是增大在数据单元上的一部分数量,或是对数码单元所做的密码转变。数字签字是对非对称加密和消息摘要的使用。数签字的原理:使用非对称密钥将签约函数加多到非对称算法,创设三个“具名”,另一方接受加密的音讯,使用确认函数来表明签字。有如下图:

澳门新葡萄京所有网站 3

     表达:顾客A采取一个非对称具名算法创制一对新密钥,本身保留私钥,公钥发给B。客商B使用客户A的公钥来评释具名。

     将散列码做为创造数字具名,有如下图:

澳门新葡萄京所有网站 4

    将散列码作为确认贰个数字签字,有如下图:

澳门新葡萄京所有网站 5

五.总结:

   上边是有关.NET数字证书的简便介绍,如有写的畸形的地方还望多多包含,在博文中某些类和章程未有相当多的罗列出来,有意思味的能够友善去浓重的刺探。大家学习一个文化时,已经从文化的布局了然开首,那样方便我们站在大局思虑难点。

 

一.数字具名概述:

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

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。