Почему я получаю DLLnotFoundException с PCLCypto в Linux/mono

У меня есть приложение C#, которое работает в Windows, но когда я пытаюсь запустить его в Linux, используя Mono, я получаю эту ошибку:

System.DllNotFoundException: NCrypt

at (управляемая оболочкой) PInvoke.NCrypt.NCryptOpenStorageProvider(PInvoke.NCrypt/SafeProviderHandle&,string,PInvoke.NCrypt/NCryptOpenStorageProviderFlags)

в PInvoke.NCrypt.NCryptOpenStorageProvider (System.String providerName, PInvoke.NCrypt + NCryptOpenStorageProviderFlags flags) [0x00000]

at PCLCrypto.NCryptAsymmetricKeyProviderBase.ImportPublicKey (System.Byte [] keyBlob, PCLCrypto.CryptographicPublicKeyBlobType blobType)

Это называется через:

var rsa = WinRTCrypto.AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithm.RsaPkcs1);

Как мне исправить?

1 ответ

Эта библиотека или, по крайней мере, определенный API, который вы используете, похоже, использует вызов платформы для использования библиотек Windows, которые являются частью операционной системы (CNG's ncrypt.dll). Похоже, он не будет работать на платформах, отличных от Windows.

Вам следует использовать альтернативную библиотеку, которая поддерживает криптографические функции, которые вы пытаетесь использовать на требуемой платформе.

Другие вопросы по тегам