首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET SignedXml提供了错误的摘要值

.NET SignedXml提供了错误的摘要值
EN

Stack Overflow用户
提问于 2020-01-03 02:14:32
回答 1查看 237关注 0票数 0

我正在尝试制作一个签名的XML文档,但我要将其发送到的web服务拒绝了它,并声明签名无效。我有一些其他的代码在php中,它的工作,网络服务接受php生成和签名的xml,但不是vb.net的。我已经使php和vb.net输入xml完全相等,但它们仍然生成不同的摘要值。我还尝试用an online tool验证xml签名,php的签名是正确的,而对于vb.net,它显示摘要值是错误的。这是我在vb中计算签名的函数:

代码语言:javascript
复制
Private Function PotpisiXml(cert As X509Certificate2, ByVal rsa As RSACryptoServiceProvider, ByVal xmlStream As MemoryStream) As XmlDocument
    xmlStream.Position = 0
    Dim xmlDoc As New XmlDocument()
    xmlDoc.Load(xmlStream)
    Dim signedXml As New SignedXml(xmlDoc)
    signedXml.SigningKey = rsa

    Dim reference As New Reference()
    reference.Uri = "#racunId"
    Dim env As New XmlDsigEnvelopedSignatureTransform()
    Dim ec14n As New XmlDsigExcC14NTransform()
    reference.AddTransform(env)
    reference.AddTransform(ec14n)
    signedXml.AddReference(reference)

    Dim keyInfo As New KeyInfo()
    Dim kdata As New KeyInfoX509Data(cert)
    Dim xserial As X509IssuerSerial
    xserial.IssuerName = cert.IssuerName.Name
    xserial.SerialNumber = cert.SerialNumber
    kdata.AddIssuerSerial(xserial.IssuerName, xserial.SerialNumber)
    keyInfo.AddClause(kdata)

    signedXml.ComputeSignature()
    signedXml.KeyInfo = keyInfo
    Dim xmlDigitalSignature As XmlElement = signedXml.GetXml()

    xmlDoc.DocumentElement.AppendChild(xmlDoc.ImportNode(xmlDigitalSignature, True))
    Return xmlDoc
End Function

vb.net生成的xml:https://pastebin.com/jrzLsv4k

php生成的xml:https://pastebin.com/kbsE2PH7

用于签名的xmlDoc对于这两个代码是完全相同的。两端的编码都是UTF-8。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-04 05:32:40

我已经修复了这个问题,删除了整个过程中所有的空格和换行符。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59568081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档