【问题标题】:why do I get DLLnotFoundException with PCLCypto on Linux/mono为什么我在 Linux/mono 上使用 PCLCypto 得到 DLLnotFoundException
【发布时间】:2018-09-24 00:35:33
【问题描述】:

我有一个可以在 Windows 上运行的 C# 应用程序,但是当我尝试使用 Mono 在 Linux 上运行它时,我得到了这个错误:

System.DllNotFoundException: NCrypt

在(包装器托管到本机)PInvoke.NCrypt.NCryptOpenStorageProvider(PInvoke.NCrypt/SafeProviderHandle&,string,PInvoke.NCrypt/NCryptOpenStorageProviderFlags)

在 PInvoke.NCrypt.NCryptOpenStorageProvider(System.String providerName,PInvoke.NCrypt+NCryptOpenStorageProviderFlags 标志)[0x00000]

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

通过以下方式调用:

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

我该如何解决?

【问题讨论】:

    标签: c# mono pcl-crypto


    【解决方案1】:

    这个库,或者至少是您正在使用的特定 API,似乎正在使用平台调用来使用作为操作系统一部分的特定于 Windows 的库(CNG 的 ncrypt.dll)。它似乎不适用于非 Windows 平台。

    您应该使用支持您尝试在所需平台上使用的加密功能的替代库。

    【讨论】:

    • 我也是这么想的,但是库是 Nuget 包 PCLCypto,它似乎能够针对 .NetPortable 和 .NetStandard 以及 MonoAndroid,所以我认为它应该可以工作?
    • @mcmillab 完全有可能编写一个 .NET“标准”库来使用不适用于所有平台的 p/invoke。我怀疑这是多平台,因此它可以在 Windows Phone 和其他类似 Windows 的平台上运行。
    • 谢谢,明白了。我对 PCLCrypto 不是很熟悉,但它似乎是专门为 RSA 的跨平台实现而设计的。我会认为包括单声道?有人在这里有经验吗?
    • 它将在 Mono 上运行,但仅在 Windows 上运行,因为 windows 具有必要的 CNG 库。您似乎正在使用 Windows 特定的 API。您能否编辑您的问题以包含生成该堆栈跟踪的代码?
    • 完成了,是的,对不起,我的意思是 Linux 上的单声道而不是 Windows
    猜你喜欢
    • 2010-11-12
    • 1970-01-01
    • 2011-03-17
    • 1970-01-01
    • 2022-10-14
    • 2016-08-18
    • 2013-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多