XML RSA数字签名纯数字URI Reference报错问题求助
XML RSA签名时纯数字ID引用报错的解决办法
问题本质:XML规范中,ID类型的属性值必须符合XML Name定义——不能以纯数字开头,必须以字母、下划线(_)或冒号(:)作为起始字符。.NET的XML数字签名组件严格遵循这一规范,因此当你使用纯数字作为ID并通过#纯数字格式的URI引用时,会触发“引用元素格式错误”的提示。
可行解决办法
方法1:修改XML的ID值(推荐)
给纯数字ID添加字母/下划线前缀,使其符合XML Name规则:
修改后的XML示例:
<book id="bk_12345"> <title>Programming .NET Security</title> <author>Adam Freeman</author> <author>Allen Jones</author> </book>
对应的VB.NET引用代码:
reference = New Reference reference.Uri = "#bk_12345"
方法2:通过XPath定位目标元素(无需修改XML时使用)
如果无法改动原有XML的ID,可放弃URI引用,改用XPath直接定位要签名的元素:
reference = New Reference() ' 用XPath匹配id为"12345"的book元素 reference.AddTransform(New XmlDsigXPathTransform("//book[@id='12345']"))
这种方式能绕过纯数字ID的格式限制,正常完成签名操作。
内容的提问来源于stack exchange,提问作者PorotoZone
相关产品推荐
相关产品推荐

