【问题标题】:Calculation of SHA1 Digest or a Xades SignedProperties is not workingSHA1 Digest 或 Xades SignedProperties 的计算不起作用
【发布时间】:2015-11-21 23:48:11
【问题描述】:

我有以下 XML 文件:

<xad:SignedProperties Id="Sig_20151117_172752_SP">
                <xad:SignedSignatureProperties>
                    <xad:SigningTime>2015-11-17T16:27:59Z</xad:SigningTime>
                    <xad:SigningCertificate>
                        <xad:Cert>
                            <xad:CertDigest>
                                <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
                                <ds:DigestValue>vkVMqVMRsiSbo3Zgvk9sTfVtRDs=</ds:DigestValue>
                            </xad:CertDigest>
                            <xad:IssuerSerial>
                                <ds:X509IssuerName>CN=CERTEUROPE ADVANCED CA V4, OU=0002 434202180, O=Certeurope, C=FR</ds:X509IssuerName>
                                <ds:X509SerialNumber>747583</ds:X509SerialNumber>
                            </xad:IssuerSerial>
                        </xad:Cert>
                    </xad:SigningCertificate>
                    <xad:SignaturePolicyIdentifier>
                        <xad:SignaturePolicyId>
                            <xad:SigPolicyId>
                                <xad:Identifier>1234567</xad:Identifier>
                                <xad:Description>Description de la politique de signature numérique</xad:Description>
                            </xad:SigPolicyId>
                            <xad:SigPolicyHash>
                                <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
                                <ds:DigestValue>ZXphcmxramhxZGY=</ds:DigestValue>
                            </xad:SigPolicyHash>
                            <xad:SigPolicyQualifiers>
                                <xad:SigPolicyQualifier>
                                    <xad:SPURI>1234567</xad:SPURI>
                                </xad:SigPolicyQualifier>
                            </xad:SigPolicyQualifiers>
                        </xad:SignaturePolicyId>
                    </xad:SignaturePolicyIdentifier>
                    <xad:SignerRole>
                        <xad:ClaimedRoles/>
                    </xad:SignerRole>
                </xad:SignedSignatureProperties>
                <xad:SignedDataObjectProperties>
                    <xad:CommitmentTypeIndication>
                        <xad:CommitmentTypeId>
                            <xad:Identifier>1.2.840.113549.1.9.16.6.1</xad:Identifier>
                            <xad:Description>1.2.840.113549.1.9.16.6.1</xad:Description>
                        </xad:CommitmentTypeId>
                        <xad:ObjectReference>#D0-Reference</xad:ObjectReference>
                    </xad:CommitmentTypeIndication>
                </xad:SignedDataObjectProperties>
            </xad:SignedProperties>

(我故意缩进它,一开始是它的线性 XML)。

我需要获取以下摘要:

<ds:Reference Id="Sig_20151117_172752_SP-Reference" Type="http://uri.etsi.org/01903/#SignedProperties" URI="#Sig_20151117_172752_SP">
            <ds:Transforms>
                <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
            </ds:Transforms>
            <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
            <ds:DigestValue>euEROs8DacsBe3xqXBY5T+M07AI=</ds:DigestValue>
        </ds:Reference>

我正在使用规范化 C14N 来执行此操作。

我尝试将这些命名空间添加到第一个标签中:

xmlns:xad="http://uri.etsi.org/01903/v1.3.2#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"

按以下顺序:

或者

但是这些尝试都行不通。有什么遗漏吗? (这是我用来计算 SHA-1 摘要的 C# 方法:

public string CalculateHashSHA1(string input)
        {
            using (SHA1Managed sha1 = new SHA1Managed())
            {
                return Convert.ToBase64String(sha1.ComputeHash(System.Text.Encoding.UTF8.GetBytes(input)));
            }
        }

编辑:

我正在尝试获取此摘要:euEROs8DacsBe3xqXBY5T+M07AI=

【问题讨论】:

  • 您确定您的数据与该组合 xml 中的数据相同吗? (也就是说,xml只是一个签名的描述符;不是原始数据)
  • 我在帖子末尾添加了源文件,但仍然找不到相同的摘要。
  • 好吧,你在这里处理的是 XADES,有几个 .net 库可以让你做到这一点。
  • 其实我用的Canonicalization方法不对。我会回答我自己的问题

标签: c# xml digest


【解决方案1】:

其实我需要用这个方法:

XmlDsigExcC14NTransform innerTransform = new XmlDsigExcC14NTransform(false);

而且结果是正确的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-31
    • 2020-05-19
    • 2013-02-19
    • 2011-03-26
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多