1

我正在尝试获取 X509.v3 证书(我作为 X509Certificate2 对象)的序列号,以将其放入XADES XMLDSIG 中的X509SerialNumber元素中,该元素应该是一个整数。我有一个由其他软件使用我正在使用的证书制作的 XML 签名,这是它的序列号:

<X509SerialNumber xmlns="http://www.w3.org/2000/09/xmldsig#">1315010063538360283821765366094690</X509SerialNumber>

不幸的是,我无法从使用用于签署上述 XML 的证书初始化的 X509Certificate2 对象中获取此值。这些是我得到的价值

X509Certificate2->SerialNumber = "40D5C2ADDEFD92740000000B9B62"
X509Certificate2->GetSerialNumber() = "40D5C2ADDEFD92740000000B9B62"
Convert::ToBase64String(X509Certificate2->GetSerialNumber()) = "YpsLAAAAdJL93q3C1UA="

我认为GetSerialNumber()返回一个Base64String。如您所见,GetSerialNumber()GetSerialNumber()返回不同的值。从这些值中获取值“1315010063538360283821765366094690”的整数的方法是什么?

4

2 回答 2

3

像这样的东西应该工作:

var serialHexString = "40D5C2ADDEFD92740000000B9B62";
var serial = BigInteger.Parse(serialHexString, NumberStyles.HexNumber);
于 2015-03-16T12:41:11.080 回答
0

对象中的序列号正是 XML 中的序列号,但采用十六进制表示法。所以真正的问题是“给定一个大的十六进制字符串,如何获得它的十进制表示?” 如果您的目标是 NET 4+,则可以使用 BigInteger。

于 2015-03-16T12:37:34.147 回答