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来获取密钥的模数和指数(无需编写任何自定义函数)?
公钥采用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)
| 归档时间: |
|
| 查看次数: |
2743 次 |
| 最近记录: |