.NET 2.x Создать экземпляр класса RSACryptoServiceProvider имя строку Base64 открытого ключа - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день! Я получаю ответ от Java приложения, в нем содержится открытый ключ вида "MFwwDQYJKoZIhvcNAQEBVQADSwAwSAJBAJZ1v21j/Ddava05Ikav1ZSFQF/KVUSz2LmdTp43A3lq+DcxhqwHKsGc+BDDQZccsNIM6tv9yObAPLt+GsnKMfVsCAwEAAQ==" Эта строка должна содержать Modulus и Exponent открытого RSA ключа. Подскажите, как имея только эту строку можно зашифровать сообщение этим публичным ключом? Заранее спасибо!

Решение задачи: «.NET 2.x Создать экземпляр класса RSACryptoServiceProvider имя строку Base64 открытого ключа»

textual
Листинг программы
string textKey = @"MFwwDQYJKoZIhvcNAQEBVQADSwAwSAJBAJZ1v21j/Ddava05Ikav1ZSFQF/KVUSz2LmdTp43A3lq+DcxhqwHKsGc+BDDQZccsNIM6tv9yObAPLt+GsnKMfVsCAwEAAQ==";
byte[] buf = Convert.FromBase64String(textKey);
 
var streamParser = new Org.BouncyCastle.Asn1.Asn1StreamParser(buf);
Org.BouncyCastle.Asn1.Asn1SequenceParser seqParser = (Org.BouncyCastle.Asn1.Asn1SequenceParser)streamParser.ReadObject();
ArrayList asnObjects = new ArrayList();
object obj;
while ((obj = seqParser.ReadObject()) != null)
{
    asnObjects.Add(obj);
}
const string OID_RSA_PUBLIC_KEY = "1.2.840.113549.1.1.1";
if (asnObjects.Count == 4)
{
    Org.BouncyCastle.Asn1.DerSequenceParser first = asnObjects[0] as Org.BouncyCastle.Asn1.DerSequenceParser;
    Org.BouncyCastle.Asn1.DerObjectIdentifier second = asnObjects[1] as Org.BouncyCastle.Asn1.DerObjectIdentifier;
    Org.BouncyCastle.Asn1.DerApplicationSpecific third = asnObjects[2] as Org.BouncyCastle.Asn1.DerApplicationSpecific;
    Org.BouncyCastle.Asn1.DerBitString fourth = asnObjects[3] as Org.BouncyCastle.Asn1.DerBitString;
    
    if (first != null && second != null && third != null && fourth != null && second.Id == OID_RSA_PUBLIC_KEY)
    {
        byte[] modulus = fourth.GetBytes();
        var root = new XElement("RSAKeyValue",
                        new XElement("Modulus", Convert.ToBase64String(modulus, Base64FormattingOptions.None)),
                        new XElement("Exponent", "AQAB") // all RSA public keys use 65537 as their exponent
                    );
        var rsa = System.Security.Cryptography.RSACryptoServiceProvider.Create();
        rsa.FromXmlString(root.ToString());
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.071 из 5
Похожие ответы