С# Зашифровать строку в RSA на основе открытого ключа HUAWEI E8372

У меня HUAWEI E8372 (LTE Wingle). Я хочу использовать WEB API для управления некоторыми настройками. WEB API — это HTTP, но зашифрованный сообщениями RSA POST/GET.

На данный момент я могу получить SESSION TOKEN и PUBLIC RSA KEY для обмена данными.

Но я не могу зашифровать данные с помощью этого открытого ключа RSA.

Это общедоступный RSA, который вы можете получить от {modem_ip}/api/webserver/publickey.

<?xml version="1.0" encoding="UTF-8"?>
<response>
<encpubkeyn>badee4e0554786797c0338bff35b80f68644c8cd96ccffd1b0f1f1558c885f237212e6499a91be2e578ee97418dac79aff85f871f38579fdc9b597aa50ad6b60dbc04a84f739647d6854881667688152c6686e715853a1adb2e5181a2ec38f86a6220e2cb30c9efab33fc453b78f0eb38a078b9c22d13b23969717b251bce6614f1c4a57decc0389ccb365ee6313f1b9fd82fc7872dd896c04518f765e7c02fa319d2f80bb2c3fc8cf615b5016ac8925ff299680b9e25ec996bb4a25cb045cc25bafd17b1d3648fbf3a69d5131b851d10e220b9f63f206db01debef0fa086cc0cf8fe816c83aac5232bbf0bda2335339556a0752f204ba3c18bdf4487b1ddbcb</encpubkeyn>
<encpubkeye>010001</encpubkeye>
</response>

когда я пытаюсь преобразовать его для RSA.FromXmlString(String) - исключение неверных данных

см. следующее C# RSA FromXmlString() BadData Exception


person TheAccessMan    schedule 26.02.2020    source источник
comment
Трудно воспроизвести без кода. В связанном вопросе строки закодированы с помощью кодировки ASCII. Но в вашем примере они должны интерпретироваться как шестнадцатеричные строки и должны быть соответственно закодированы, например. для модуля с rsaKeyValue += Convert.ToBase64String(StringToByteArray("bade...dbcb")); и аналогично для показателя степени. Возможную реализацию для StringToByteArray можно найти, например. здесь.   -  person user 9014097    schedule 28.02.2020
comment
Топако, спасибо за комментарий. Я нашел оригинальную библиотеку в JS gist.github.com/ForsakenHarmony/c9a96e11600bbf807513.   -  person TheAccessMan    schedule 01.03.2020


Ответы (1)


Метод шифрования с открытым ключом использует комбинацию закрытого ключа и открытого ключа. Закрытый ключ известен только вашему компьютеру, а открытый ключ предоставляется вашим компьютером любому другому компьютеру, который хочет безопасно взаимодействовать с ним. Чтобы расшифровать зашифрованное сообщение, компьютер должен использовать открытый ключ, предоставленный компьютером, отправившим сообщение, а также свой собственный закрытый ключ. Довольно хорошая конфиденциальность (PGP) — очень популярная утилита шифрования с открытым ключом, которую можно использовать для шифрования практически любых данных. Компьютер-отправитель шифрует документ с помощью симметричного ключа, а затем шифрует симметричный ключ с помощью открытого ключа компьютера-получателя. Последний использует свой закрытый ключ для декодирования симметричного ключа, а затем использует симметричный ключ для декодирования документа. Внедрение шифрования с открытым ключом в больших масштабах (например, оно может понадобиться защищенному веб-серверу) требует альтернативного подхода. В настоящее время можно использовать цифровые сертификаты. По сути, цифровой сертификат — это часть информации, в которой говорится, что веб-серверу доверяет независимый источник, называемый центром сертификации. Центр сертификации действует как посредник, которому доверяют оба компьютера. Он подтверждает, что удостоверение каждого компьютера соответствует заявленному удостоверению, а затем предоставляет открытый ключ каждого компьютера другому.

person Mary    schedule 29.05.2020