【问题标题】:Getting X509SerialNumber integer value from X509Certificate2从 X509Certificate2 获取 X509SerialNumber 整数值
【发布时间】:2015-03-16 12:28:48
【问题描述】:

我正在尝试获取 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”的整数的方法是什么?

【问题讨论】:

    标签: .net x509certificate2 serial-number xml-dsig


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,但你能告诉我如何从 BigInteger 类型的结果“串行”变量中获取整数吗?
    • 该值太大,Int32(或Int64)无法表示。这就是为什么你需要使用BigInteger
    • 好的,知道了。使用 Convert::ToString() 将其转换为字符串。
    • 您不需要使用Convert::ToString()serial.ToString() 就足够了。
    • @FranzHuber23: System.Numerics.BigInteger.
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-30
      • 2012-12-18
      • 1970-01-01
      相关资源
      最近更新 更多