UWP AsymmetricKeyAlgorithmProvider.ExportPublicKey在.NET Standard RSACryptoServiceProvider的等效实现
UWP RSA公钥导出逻辑的.NET Standard 2.0等效实现
原功能需求
实现与以下UWP代码完全等效的RSA密钥生成、公钥导出逻辑,输出公钥可被原有服务端直接识别:
var rsa = AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithmNames.RsaPkcs1); var keyPair = rsa.CreateKeyPair(2048); var publicKey = keyPair.ExportPublicKey(); var publicKeyStr = Convert.ToBase64String(publicKey.ToArray());
原有方案失效原因
- 调用
RSACryptoServiceProvider.ExportCspBlob导出的是微软专有CSP格式公钥,和UWP默认输出的标准PKCS#1 ASN.1编码公钥格式不兼容 - 导出PEM格式时如果使用PKCS#8规范、或是额外添加了非必要格式头,也会导致服务端校验不通过
正确实现方案
.NET Standard 2.0 原生支持RSA公钥的PKCS#1格式导出,无需引入第三方库,实现代码如下:
using System.Security.Cryptography; // 生成2048位RSA密钥对 using var rsa = RSA.Create(2048); // 导出PKCS#1格式公钥原始字节,与UWP ExportPublicKey()输出格式完全一致 byte[] publicKeyBytes = rsa.ExportRSAPublicKey(); // 转换为Base64字符串,对齐UWP最终输出结果 string publicKeyStr = Convert.ToBase64String(publicKeyBytes);
如果需要输出带标准头尾的PEM格式公钥,可使用以下扩展逻辑:
string publicKeyPem = @$"-----BEGIN RSA PUBLIC KEY----- {Convert.ToBase64String(publicKeyBytes, Base64FormattingOptions.InsertLineBreaks)} -----END RSA PUBLIC KEY-----";
内容的提问来源于stack exchange,提问作者Fernando
相关产品推荐
相关产品推荐

