Получение целочисленного значения X509SerialNumber из X509Certificate2
Я пытаюсь получить серийный номер сертификата X509.v3 (который у меня есть как объект X509Certificate2), чтобы поместить его в элемент X509SerialNumber в XADES XMLDSIG, который должен быть целым числом. У меня есть подпись 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" из этих значений?
2 ответа
Примерно так должно работать:
var serialHexString = "40D5C2ADDEFD92740000000B9B62";
var serial = BigInteger.Parse(serialHexString, NumberStyles.HexNumber);
Серийный номер в вашем объекте - это точно серийный номер в XML, но в шестнадцатеричном формате. Таким образом, реальный вопрос заключается в следующем: "Как получить большую шестнадцатеричную строку, как получить ее десятичное представление?" Если вы нацелены на NET 4+, вы можете использовать BigInteger.