Intereting Posts
Неопределенная переменная: $ _SESSION Атомно добавляя строку в файл и создавая ее, если она не существует Как заставить Apache обслуживать index.php вместо index.html? Фиксация сломанной кодировки UTF8 SELECT, где значение строки содержит строку MySQL PHP: помощь в защите / фильтрации вызовов ajax Преимущества использования подготовленных операторов над нормальными заявлениями mysqli? Лучший / простой способ анализа параметров конфигурации в Sh / Bash и php Как построить дерево / вложенный массив «дочерний родительский элемент» из базы данных? Codeigniter присоединил таблицы, получившие неправильный вывод Как использовать RDBMS по-исполнительски поверх Zend_Db_Table? (если вообще…) Динамический белый список с htaccess, позволяющий форме добавить IP-адрес в белый список? PHP Неустранимая ошибка: Class 'Facebook' не найден в Оператор PHP и & quot; php обнаруживает dpi изображения в pdf

C # и PHP ECDH не соответствуют

Я пытаюсь создать общий секрет между веб-сервером с PHP и настольным приложением C #. Я знаю библиотеку BouncyCastle, но я бы предпочел не использовать ее, так как она довольно огромная.

Я использую phpecc и ECDiffieHellmanCng и пытаюсь создать общий секрет между двумя сторонами, но у меня возникают проблемы с экспортом / импортом на C #.

Кажется, что phpecc требует формат der / pem для импорта ключа, и ECDiffieHellmanCng, похоже, не имеет простого способа экспорта в совместимом формате.

Должен ли я написать свой собственный кодер и декодер pem / der, чтобы сделать это, или есть альтернативный способ?

В настоящее время я делаю следующее в C #:

using (var ecdh = new ECDiffieHellmanCng()) { ecdh.HashAlgorithm = CngAlgorithm.ECDiffieHellmanP384; ecdh.KeyDerivationFunction = ECDiffieHellmanKeyDerivationFunction.Hash; var encoded = EncodePem(ecdh.PublicKey.ToByteArray()); //... do something with encoded } private static string EncodePem(byte[] data) { var pemDat = new StringBuilder(); var chunk = new char[64]; pemDat.AppendLine("-----BEGIN PUBLIC KEY-----"); var encodedData = Convert.ToBase64String(data); for (var i = 0; i < encodedData.Length; i += chunk.Length) { var index = 0; while (index != chunk.Length && i + index < encodedData.Length) { chunk[index] = encodedData[i + index]; index++; } pemDat.AppendLine(new string(chunk)); } pemDat.AppendLine("-----END PUBLIC KEY-----"); return pemDat.ToString(); } 

Очевидно, что вышеупомянутое только делает кодировку pem, поэтому на стороне php она возвращает ошибку, когда пытается ее проанализировать:

Тип: Runtime

Сообщение об исключении: неверные данные.

Файл: /…/vendor/mdanter/ecc/src/Serializer/PublicKey/Der/Parser.php

Линия: 49