给定大小为 2048 的 RSA 公钥,如何仅使用内置 .net core 函数获取其模数和指数?

Rag*_*ghu 1 c# cryptography .net-core

我有大小为 2048 位的 RSA 公钥(如下所示):

-----开始公钥----- MIIBIjANBgkqhkiG9w0BAQEFAOCAQ8AMIIBCgKCAQEAjAc8U25mMDj93zGs6lEm 5HUbb22tLpWF8z13Lc4tRqNZ1WCGemI6fOhN1r1dkYpfMWakRqiCDX72gKi37zRX XJhYz9F8qUX CzGPdCWhr2Eywyl5YKsCV+wnHjRPL++aqBEMBTrKsxrPByGjDxpYW I/DgPinUWkZbSeIOZ4JX7Ze3SPNKDbDvJ5Ls2qGuFymtnpxWHbvWbHW1JuT4oHAd 1AhYOIRhVTRN+AGIgwvM0kposNH4P8KwhVe 2CD6Pz6+54ealf1SctrE/X2EohigO aG4O2QtGGc/FxnzhdHpLpcXiYhA6EFll+D3DdU6Hb4iBMYiQQBlFnf/A6Evuix+L dQIDAQAB -----结束公钥- ----

有没有办法通过使用.net core来获取密钥的模数和指数(无需编写任何自定义函数)?

Top*_*aco 5

公钥采用X.509-PEM格式。对于 .NET Core 3.0,有-class的 -method 的内置支持ImportSubjectPublicKeyInfoRSA

// publicKeyX509PEM: String containig the key-data
byte[] publicKeyX509DER = ConvertX509PemToDer(publicKeyX509PEM);
RSA rsa = RSA.Create();
rsa.ImportSubjectPublicKeyInfo(publicKeyX509DER, out _);
RSAParameters parameters = rsa.ExportParameters(false);

// get parameters.Exponent and parameters.Modulus
Run Code Online (Sandbox Code Playgroud)

请注意,该ImportSubjectPublicKeyInfo- 方法仅处理 DER 格式,它本质上是 PEM 格式的二进制格式(更多详细信息请参见此处)。因此,必须首先将 PEM 格式转换为 DER 格式,例如

private static byte[] ConvertX509PemToDer(string pemContents)
{
    return Convert.FromBase64String(pemContents
        .TrimStart("-----BEGIN PUBLIC KEY-----".ToCharArray())
        .TrimEnd("-----END PUBLIC KEY-----".ToCharArray())
        .Replace("\r\n", ""));
}
Run Code Online (Sandbox Code Playgroud)

或者,也可以使用 OpenSSL 进行转换

openssl rsa -pubin -inform PEM -outform DER -in <path to pem-input-file> -out <path to der-output-file>
Run Code Online (Sandbox Code Playgroud)

  • 也许微软可以将你的答案复制到其文档中;) (3认同)