Параметры открытого ключа для алгоритма RSA: {e, n}
, показатель степени и модуль. В .NET они доступны из структуры RSAParameters
. Другие поля представляют закрытый ключ.
Итак, чтобы сравнить X509Certificate2
и RSACryptoServiceProvider
для равенства открытых ключей, вы можете просто получить следующие параметры:
AsymmetricAlgorithm signingKey;
bool signatureIsVerified = signedXml.CheckSignatureReturningKey(out signingKey);
var certificateParameters =
((RSA)certificate.PublicKey.Key).ExportParameters(
includePrivateParameters: false);
var signingParameters = signingKey.ExportParameters(
includePrivateParameters: false);
bool areEqual =
ByteArrayEquals(certificateParameters.Exponent,
signingParameters.Exponent)
&& ByteArrayEquals(certificateParameters.Modulus,
signingParameters.Modulus);
Вам придется реализовать ByteArrayEquals
, потому что нет хорошего способа сделать это в .NET .
Если вы используете DSA, а не RSA, открытый ключ состоит из {p, q, g, y}
.