从 X509Certificate2 获取 X509序列号整数值



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

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

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

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

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

这样的事情应该可以工作:

var serialHexString = "40D5C2ADDEFD92740000000B9B62";
var serial = BigInteger.Parse(serialHexString, NumberStyles.HexNumber);

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

最新更新