Руководство по аутентификации Crypto / Token

2

Я купил некоторое оборудование, которое разделяет документ о том, как аутентифицироваться здесь:

Crypto, определенно, не моя вещь, и я пытаюсь понять, как и в какой форме криптона это попытка найти онлайн-примеры, чтобы я мог попробовать и общаться с использованием С# и предпочтительного ядра.net, чтобы я мог быть x-plat.

Теперь есть код здесь, что делает именно это, кроме него в Node.js, я считаю, и я не знаю, крипто LIB

Таким образом, это то, что они заявляют в документации:

  1. Приобретите открытый ключ Miniservers через "jdev/sys/getPublicKey" → {publicKey} a. Хранить на клиенте. B. Формат: X.509 закодированный ключ в ANS.1
  2. откройте соединение WebSocket a. используйте следующий путь: "ws://{ipOrUrl}: {port}/ws/rfc6455" b. укажите "remotecontrol" как Sec-WebSocket-Protocol. с. wss://не поддерживается Miniserver.
  3. Сгенерируйте ключ AES256 → {key} (Hex)
  4. Создайте случайный AES iv (16 байт) → {iv} (Hex)
  5. RSA Шифровать ключ AES + iv с помощью {publicKey} → {session-key} (Base64) a. "{key}: {iv}" - полезная нагрузка, которая должна быть зашифрована с использованием RSA
  6. Обмен ключами через "jdev/sys/keyexchange/{session-key}"
  7. Создайте случайную соль, шестую строку (длина может меняться, например, 2 байта) → {salt}
  8. Теперь есть два варианта: a. Если существует токен, выполните аутентификацию, как описано в разделе Аутентификация с использованием токенов b. Если необходимо приобрести токен, действуйте так, как описано в разделе "Приобретение токенов". Конфигурация 9.3. Общение с мини-сервером Страница 5 из 21
  9. После успешной проверки подлинности на токенах или получения нового токена сокет будет аутентифицирован и готов к работе.

Поэтому я уверен, что я хорошо разбираюсь в шаге 2 (возможно, не в формате кодированного x.509 ключа.. Я взял это как полосу прокладки и просто получил значения base64:

        UriBuilder builder = new UriBuilder("http://192.168.0.77");
        using (var request = new LxHttpRequest(builder.Uri))
        {
            CancellationToken token = new CancellationToken();
            string result = request.GetStringAsync("jdev/sys/getPublicKey", token).Result;
            var res = ResultConverter.Deserialize(result);

            Console.WriteLine(TokenAuth.parsePublicKey(res.Content));
        }

Шаг 3, я клонировал код из loxnet, который, я думаю, является хорошей отправной точкой, настолько довольной этим.

Шаг 4/5, где я нахожусь:

         var aes = new AesCryptoServiceProvider();
            aes.GenerateIV();
            byte[] iv = aes.IV;
            aes.GenerateKey();
            Console.WriteLine("Key base64: {0}", Convert.ToBase64String(aes.Key));

но примерно в этот момент моя голова маринована, и меня раздражает.. Я ценю, что это похоже на просьбу о помощи в выполнении домашних заданий - но я больше надеюсь, что кто-то сможет объяснить, что это называется, чтобы я мог продолжать поиск - если кто-то не может помощь с примерами/фрагментами или предложение пакета nuget, который делает трудолюбие - я посмотрел на bouncycastle, но это заставило мои глаза хотеть кровоточить, пытаясь понять все: D: D

Прощай, пылай!

  • 0
    Что именно ты спрашиваешь? Я понимаю суть вопроса, но вы дошли до шага 4/5 и ... что? В чем здесь проблема? Код не работает или вы не знаете, что делать сейчас? Вы можете задать конкретный вопрос?
  • 0
    Я не знаю, что мне нужно делать дальше! - Я не понимаю шаги, чтобы узнать, какой метод шифрования AES это, чтобы я мог найти пример кода, который я могу адаптировать! например, посмотрите список возможностей bouncycastle bouncycastle.org/csharp. Слишком много разных алгоритмов, чтобы я мог протестировать каждый из них .. наверняка кто-то знает, что это такое?
Показать ещё 3 комментария
Теги:
encryption

1 ответ

1

поэтому я еще раз взглянул на инструкции и просто попытался проложить себе путь... это похоже на то, что я на правильном пути:

    private static void CryptoTest()
    {
        byte[] serversPublicKey = GetPublicKey();

        // Create a new instance of RSACryptoServiceProvider.
        var RSA = new RSACryptoServiceProvider();
        var RSAKeyInfo = RSA.ExportParameters(includePrivateParameters: false);

        // Set RSAKeyInfo withthe provided public key. 
        RSAKeyInfo.Modulus = serversPublicKey;
        RSA.ImportParameters(RSAKeyInfo);

        // Generate New AES key
        var aes = new AesCryptoServiceProvider();
        aes.GenerateIV();
        aes.GenerateKey();

        byte[] sessionKey;

        using (var stream = new MemoryStream())
        {
            using (var writer = new BinaryWriter(stream))
            {
                // Encrypt the aes key and iv
                writer.Write(aes.Key);
                writer.Write(":");
                writer.Write(aes.IV);
            }

            sessionKey = RSA.Encrypt(stream.ToArray(), RSAEncryptionPadding.Pkcs1);
        }

        Console.WriteLine($"Encrypted Session Key (Base64): {Convert.ToBase64String(sessionKey)}");

        // Todo Step 7 send key to server

    }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню