Каков правильный способ преобразования JWK в пару значений ключа RSA

#c# #asp.net-core #cryptography #rsa #jwk

#c# #asp.net-core #криптография #rsa #jwk

Вопрос:

допустим, у нас есть следующий JWK в качестве встроенного ресурса в проекте

введите описание изображения здесь

следующий код успешно считывает JSON в JSONWebKey

  JsonWebKey jwk = ReadResource();
  

Мы хотим, чтобы это было преобразовано в пару значений ключа RSA, поэтому у нас есть следующий код, который, как ожидается, преобразует JWK в пару ключей RSA.

             UnicodeEncoding ByteConverter = new UnicodeEncoding();

            RSAParameters publicKey = new RSAParameters();
            RSAParameters privateKey = new RSAParameters();

            JsonWebKey jwk = ReadResource();

           // PUBLIC KEY

            publicKey.Exponent = ByteConverter.GetBytes(jwk.E);
            publicKey.Modulus = ByteConverter.GetBytes(jwk.N);

            // PRIVATE KEY

            privateKey.Exponent = ByteConverter.GetBytes(jwk.E);
            privateKey.Modulus = ByteConverter.GetBytes(jwk.N);
            privateKey.D = ByteConverter.GetBytes(jwk.D);
            privateKey.DP = ByteConverter.GetBytes(jwk.DP);
            privateKey.DQ = ByteConverter.GetBytes(jwk.DQ);
            privateKey.P = ByteConverter.GetBytes(jwk.P);
            privateKey.Q = ByteConverter.GetBytes(jwk.Q);
            privateKey.InverseQ = ByteConverter.GetBytes(jwk.QI);
  

Но когда мы пытаемся подписать данные следующим образом

             RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider(2048);
            RSAalg.ImportParameters(privateKey);
            return RSAalg.SignData(DataToSign, SHA256.Create());
  

он выдает CryptographicException @ RSAalg.ImportParameters(PrivateKey);

каков правильный способ преобразования JWK в пару ключей RSA с помощью C#.net ядро.

Комментарии:

1. UnicdeEncoding это неправильный кодировщик. Значения кодируются с использованием urlsafe base64, и именно такой декодер вам нужен.

2. сработало как шарм, если вы опубликуете его в качестве ответа, я могу пометить его как ответ, спасибо