Я пытаюсь использовать Org.BouncyCastle.X509 для вывода содержимого списков отзыва сертификатов (CRL). В этом случае мне нужно получить список серийных номеров сертификатов в их строковом представлении «шестнадцатеричное», как они отображаются в оснастке MM C сертификатов (примерное значение будет 16a03c2c000000000594 ).
Я могу добраться до точки, где у меня есть коллекция объектов X509CRLEntry для итерации, но свойство SerialNumber имеет тип Org.BouncyCastle.Math. BigInteger . Этот тип имеет реализацию ToString () , однако возвращенное значение мне не пригодно:
public CRLProc(string CRLFile)
{
X509CrlParser Parser = new X509CrlParser();
X509Crl CRL = Parser.ReadCrl(File.ReadAllBytes(CRLFile));
NextUpdate = CRL.NextUpdate.Value;
var RevokedCerts = CRL.GetRevokedCertificates();
foreach(X509CrlEntry entry in RevokedCerts)
{
//Target value (first SN in CRL): 16a03c2c000000000594
string serialNumber = entry.SerialNumber.ToString();
//serialNumber = "106847877515466973906324" (Nope)
string serialFromBytes = Encoding.Default.GetString(entry.SerialNumber.ToByteArray());
//serialFromBytes = "\u0016 <,\0\0\0\0\u0005”" (That's a hard NO)
string serialFromBigInt = entry.SerialNumber.LongValue.ToString("X");
//serialFromBigInt = "3C2C000000000594" (OK, now we're getting somewhere!!)
}
Итак, похоже, LongValue.ToString FTW, но последний кусочек головоломки - как получить первые 2 октета серийного номера («16 a0»). Нужны советы по этому поводу!