@nikifovadim
Software Engineer

Поддержка Diffie-Hellman алгоритма на Macbook Pro и PublicKey is Null почему?

Пытался сделать клиент серверное приложение и зашифровать канал связи и передачи ключей Алгоритм Диффи-Хеллмана (англ. Diffie–Hellman, DH), а информацию зашифровать RSA, AES, или алгоритмом Эль-гамаля (это было в вузе), которая будет передаваться. В итоге у меня падает тест так как инстанс класса DiffieHellman не создает PublicKey как в статье на CodeProject. Ну или свойство PublicKey у меня почему-то null Так же этот код не работает у меня на Macbook PRO. Microsoft сделала System.Security.Cryptography; cross-platfrom или нет?

Статья на CodeProject - https://www.codeproject.com/Articles/1219531/Imple...

Code метода шифрования:
public async Task<byte[]> EncryptAsync(byte[] publicKey, string secretMessage, CancellationToken cancellationToken)
        {
            byte[] encryptedMessage;
            var key = CngKey.Import(publicKey, CngKeyBlobFormat.EccPublicBlob);
            var derivedKey = _ECDiffieHellmanCng.DeriveKeyMaterial(key); // "Common secret"

            _aes.Key = derivedKey;

            using (var cipherText = new MemoryStream())
            {
                using (var encryptor = _aes.CreateEncryptor())
                {
                    using (var cryptoStream = new CryptoStream(cipherText, encryptor, CryptoStreamMode.Write))
                    {
                        byte[] ciphertextMessage = Encoding.UTF8.GetBytes(secretMessage);
                        await cryptoStream.WriteAsync(ciphertextMessage, 0, ciphertextMessage.Length, cancellationToken);
                    }
                }

                encryptedMessage = cipherText.ToArray();
            }

            return encryptedMessage;
        }


Code тестов:
private Business.DiffieHellman _diffieHellmanAlice { get; set; }
	private Business.DiffieHellman _diffieHellmanBob { get; set; }
	private string _text { get; set; }

        [SetUp]
	public void Setup()
	{
		_diffieHellmanAlice = new Business.DiffieHellman();
		_diffieHellmanBob = new Business.DiffieHellman();
		_text = "My random text";
	}

	[Test]
	public async Task EncryptDecrypt_ShouldBeTrue()
	{
                // Кидает исключение тк  PublicKey is null
		var encryptedMsg = await _diffieHellmanAlice.EncryptAsync(_diffieHellmanBob.PublicKey, _text, new System.Threading.CancellationToken());
	}


Скриншот тестов:
6280f2eccd80f010648105.jpeg

Скриншот метода с входными параметрами:
6280f32cac1e6524716386.jpeg
  • Вопрос задан
  • 96 просмотров
Решения вопроса 1
@nikifovadim Автор вопроса
Software Engineer
Просто добавил в property класс ECDiffieHellmanCng, взял его свойство PublicKey и вернул байты. После тест прошел и все заработало, но поддержка на Macbook Pro алгоритма Diffie Hellman (DH) Microsoft так и не была реализована пока-что
private ECDiffieHellmanCng _ECDiffieHellmanCng;

public byte[] PublicKey
{
    get
    {
        return _ECDiffieHellmanCng.PublicKey.ToByteArray();
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы