Runtime: RSA.ImportRSAPublicKey doesn't work for PEM .net core 3

Created on 7 Oct 2019  路  1Comment  路  Source: dotnet/runtime

I'm trying to import public-key parameters from PEM with RSA.ImportRSAPublicKey but it throws System.Security.Cryptography.CryptographicException: 'ASN1 corrupted data'. RSA.ImportRSAPrivateKey works fine for import private-key parameters.

Example:

for private key (works fine):

var privateKey = "MIICXAIBAAKBgQCJHYcuRHdJ5S8GYcz/IgF5hJY+vvchVaeKyD+GGSoiD58pRJ3kx5b7YbbP/EyzwhUxWncvbsiWZFdqca/DHsFKxNnRgvidoyq2dgA+erP91aFHpccH2ykNxC6LTzMXX4XWp5mXKm6XfMkBFzsVC4/a7A6UHnsL7MU2b4lec+WkSwIDAQABAoGAMV1zLOIzfGRKAOc3MefhVgm5Og/w04yODHY6AKKQu8CaEfaFTjfZkNnGQq1YRCOtE565aFdfWl335vfVSs+I0UTKYtUdU0DkeZ93nB+eaUIQ/7UC99UlcdSrlRfXGwBxdcwM+Ek93VeITWERydh+xyXN3VxzaYtApA1fB/YGnzkCQQDcb8X6xFigw0qSpHXX+qpBQcTSbIQ5u47vK0VRIkDI3vN3tGBeIpU78kK3E+cHG8e74Nobn1/nJ09TKS4jzoudAkEAnzyDQPD269xzwTvICVMDvezEN4sy3+XJdJjtOdtL4RZKRqOUiaJmKhR1QUtlrG71LqudUiwZ7DnzloKyvLYvBwJAXCyw0GcB2FdQ+3ihfipmvtrNfl+5+poe7otddMup41S24bsfAL3dQS/QDdXYqPRI1Jr1GM/PvkyFsvRpQre/UQJBAIavIDVlmvSUWjQu5Fs+pAOYp75zNmy6Z1L/pmcxXVTdDaYB5jkj61XcR/EaXL0kfK0k6sP+GU79FVNQ6O1FCzECQAD8SLqaJOGbiPYrf+gRx337xQTatlaaXIaRrtNKj4E3/WtyKQQXEILCMDS1Xa88sK12nQgu6DVxOtIs+7cEvds=";
var rsa = RSA.Create();
rsa.ImportRSAPrivateKey(Convert.FromBase64String(privateKey), out _);

for public key(throws exception):

var publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCJHYcuRHdJ5S8GYcz/IgF5hJY+vvchVaeKyD+GGSoiD58pRJ3kx5b7YbbP/EyzwhUxWncvbsiWZFdqca/DHsFKxNnRgvidoyq2dgA+erP91aFHpccH2ykNxC6LTzMXX4XWp5mXKm6XfMkBFzsVC4/a7A6UHnsL7MU2b4lec+WkSwIDAQAB";
var rsa = RSA.Create();
rsa.ImportRSAPublicKey(Convert.FromBase64String(publicKey), out _);

Maybe I'm doing something wrong?

area-System.Security

Most helpful comment

The public key appears to be encoded as a SubjectPublicKeyInfo, while the private key appears to be encoded as a PKCS#1 RSAPrivateKey.

The public key will import successfully using ImportSubjectPublicKeyInfo, which is also new in .NET Core 3.

rsa.ImportSubjectPublicKeyInfo(Convert.FromBase64String(publicKey), out _);

>All comments

The public key appears to be encoded as a SubjectPublicKeyInfo, while the private key appears to be encoded as a PKCS#1 RSAPrivateKey.

The public key will import successfully using ImportSubjectPublicKeyInfo, which is also new in .NET Core 3.

rsa.ImportSubjectPublicKeyInfo(Convert.FromBase64String(publicKey), out _);
Was this page helpful?
0 / 5 - 0 ratings

Related issues

bencz picture bencz  路  3Comments

chunseoklee picture chunseoklee  路  3Comments

Timovzl picture Timovzl  路  3Comments

jzabroski picture jzabroski  路  3Comments

omajid picture omajid  路  3Comments