Как использовать мой собственный открытый/закрытый ключ для шифрования строки C# Asp.net core

Я потратил несколько часов, пытаясь получить действующую функцию шифрования/дешифрования, использующую асимметричное шифрование, и лучшим вариантом, по-видимому, является RSA. Но дело в том, что я хочу иметь возможность предоставить свой собственный открытый/закрытый ключ функции в виде строки в форме: "769de1f1a9dd6e114f81b9490ea42a2967840353edd358a35c84e2c831dd40a2", что-то очень похожее на 'eth-crypto' библиотека npm для javascript.

но я не нашел никакой статьи или документации, объясняющей это. так кто-нибудь реализовал это раньше или есть статья, которая объясняет это. имейте в виду, что при использовании ядра asp.net FromXmlString не работает даже при использовании 3.0

Вот моя функция шифрования:

public static string EncryptAsymmetric(string textToEncrypt, string publicKeyString)
        {


            var bytesToEncrypt = Encoding.UTF8.GetBytes(textToEncrypt);

            using (var rsa = new RSACryptoServiceProvider(2048))
            {
                try
                {

                    rsa.FromXmlString(publicKeyString);
                    var encryptedData = rsa.Encrypt(bytesToEncrypt, true);
                    var base64Encrypted = Convert.ToBase64String(encryptedData);
                    return base64Encrypted;
                }
                finally
                {
                    rsa.PersistKeyInCsp = false;
                }
            }
        }

но он выдает ошибку в FromXmlString (операция не поддерживается на этой платформе), поэтому, если есть какой-либо другой способ, возможно...

любая помощь очень ценится, потому что я изучал ее много часов безрезультатно.


person MTG    schedule 20.02.2020    source источник
comment
Откуда вы взяли эту ключевую строку? Учитывая его длину и формат, я сомневаюсь, что это действительный ключ RSA.   -  person John Wu    schedule 20.02.2020
comment
использование предоставит его закрытый ключ, а открытый ключ будет доступен в базе данных. между прочим, это открытый/закрытый ключ блокчейна   -  person MTG    schedule 20.02.2020
comment
FromXMLString работает только с ключом, определяющим тип схемы: ‹RSAKeyValue› ‹Modulus›….‹/Modulus› ‹Exponent›…‹/Exponent› ‹P›….‹/P› ‹Q›….‹/Q › ‹DP›….‹/DP› ‹DQ›….‹/DQ› ‹InverseQ›…‹/InverseQ› ‹D›…‹/D› ‹/RSAKeyValue› Используйте это для импорта открытого ключа в криптопровайдер. stackoverflow.com/questions/41808094/   -  person Colin Smith    schedule 20.02.2020
comment
Строка, которую вы используете, имеет только 64 шестнадцатеричных цифры, что обеспечивает 256 бит энтропии. Не может быть, чтобы это был 2048-битный ключ RSA. Кроме того, ключ RSA на самом деле представляет собой структуру данных, содержащую несколько разных значений.   -  person John Wu    schedule 20.02.2020
comment
I tried this for a public key to see whether the problem is from the format or the function: const string public_key = ‹RSAKeyValue›‹Modulus›uznzVPilsR1rWPkpq6m6IALaafDnVZTDDcnEyBD3A/PBx2JZTKM0DTgiTDDwCEmQBNBpPILcIBdtg3aSUgicair+2ksYrVFT+uiy0Zy1nU6qoJ+SsapLKrpCa1zHpV4LMO/pFo4Foqzw0C1FNe56FXo1xj77GPgeYl0MHUVtAUc=‹/Modulus›‹Exponent›AQAB ‹/Экспонент›‹/RSAKeyValue›; но это все равно дало мне ошибку «Операция не поддерживается на этой платформе».   -  person MTG    schedule 20.02.2020
comment
Интересно, что вы получаете исключение PlatformNotSupportedException. В документах говорится, что это будет брошено на .NET Core, но функция в самом .NET Core, похоже, полностью реализована...   -  person yaakov    schedule 20.02.2020
comment
@yaakov Я даже пытался использовать методы расширения, чтобы избавиться от этой ошибки, но, к сожалению, это не сработало.   -  person MTG    schedule 20.02.2020
comment
В качестве обходного пути вы можете использовать что-то вроде OpenSSL для создания сертификата с использованием уже имеющегося у вас ключа, а затем использовать сертификат с RSACryptoServiceProvider.   -  person John Wu    schedule 20.02.2020