.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()); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д