Я на самом деле не смог сделать это с помощью BouncyCastle либо. Существующие посты и информация очень устарели, а текущая документация не существует

тоящее время я пытаюсь создатьRSACryptoServiceProvider объект исключительно из декодированного файла PEM. После нескольких дней поиска мне удалось разобрать рабочее решение, но оно не было готово к работе.

В двух словах, чтобы создатьRSACryptoServiceProvider объект из байтов, которые составляют открытый ключ в файле PEM, я должен создать объект, определяющий размер ключа (в настоящее время 2048, в частности, SHA256), а затем импортироватьRSAParameters объект сExponent а такжеModulus задавать. Я делаю это так;

byte[] publicKeyBytes = Convert.FromBase64String(deserializedPublicKey.Replace("-----BEGIN PUBLIC KEY-----", "")
                                                                      .Replace("-----END PUBLIC KEY-----", ""));

// extract the modulus and exponent based on the key data
byte[] exponentData = new byte[3];
byte[] modulusData = new byte[256];
Array.Copy(publicKeyBytes, publicKeyBytes.Length - exponentData.Length, exponentData, 0, exponentData.Length);
Array.Copy(publicKeyBytes, 9, modulusData, 0, modulusData.Length);


// import the public key data (base RSA - works)
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(dwKeySize: 2048);
RSAParameters rsaParam = rsa.ExportParameters(false);
rsaParam.Modulus = modulusData;
rsaParam.Exponent = exponentData;
rsa.ImportParameters(rsaParam);

Хотя это работает, нельзя предположить, чтоdeserializedPublicKey будет точно 270 байтов, и что нужный мне модуль находится в позиции 9 и всегда будет 256 байтов в длину.

Как я могу изменить это, чтобы правильно выбрать байты модуля и экспоненты при заданном наборе байтов открытого ключа? Я попытался разобраться в стандарте ASN.1, но без особой удачи нашел то, что мне нужно, - стандарты несколько византийские.

Любая помощь приветствуется.

Ответы на вопрос(3)

Ваш ответ на вопрос