.net标准2.0和System.Security.Cryptography.ProtectedData.Protect

时间:2018-01-11 13:29:27

标签: .net-core .net-standard-2.0

查看System.Security.Cryptography.ProtectedData.Protect @ https://docs.microsoft.com/en-gb/dotnet/api/

因为我们希望将一个库从4.7移植到.net标准2.0库,其中.net core 2.0将使用它。 所以我做了一个搜索,它只在完整的框架和.net核心

中提供

我的问题是为什么在.Net Stanard 2.0中没有它?

我会教它是否可以用于例如4.7和.net core 2.0那么它将成为.Net Standard 2.0的一部分

3 个答案:

答案 0 :(得分:7)

此API在“.NET标准2.0”中不可用,但它“可用于”.NET Standard 2.0作为“平台扩展”,这意味着您必须添加一个NuGet包以获得对它的支持

如果添加对System.Security.Cryptography.ProtectedData NuGet包的引用,则可以开发使用这些API的.NET标准库。

但是,此支持仅在Windows上运行时才有效,因为这些API被描述为

  

提供对Windows Data Protection Api。

的访问

所以它不适用于Windows以外的平台。根据您的需要,这可能没问题。

如果您希望跨平台实现类似的概念,我建议查看ASP.NET Core Data Protection APIs,它也可以在ASP.NET核心应用程序的上下文之外使用,因为它是由NuGet包构成的提供加密逻辑和密钥存储解决方案(例如目录,Windows证书存储,Azure KeyVault)。

答案 1 :(得分:0)

ProtectedData使用Windows中的DPAPI。我创建了CrossProtectedData库,该库在非Windows中运行时使用Windows中的ProtectedData和AspNetCore.DataProtection。

要使用,只需添加NuGet软件包CrossProtect,然后将对ProtectedData的所有调用替换为CrossProtect。示例:

using Integrative.Encryption;
using System;
using System.Security.Cryptography;
using System.Text;

namespace CrossProtectedExample
{
    class Program
    {
        static void Main(string[] args)
        {
            // our text to protect
            var text = "Hello!";

            // get bytes from text
            var bytes = Encoding.UTF8.GetBytes(text);

            // optional entropy
            var entropy = new byte[] { 100, 25, 31, 213 };

            // protect (encrypt)
            var protectedBytes = CrossProtect.Protect(bytes, entropy,
                DataProtectionScope.CurrentUser);

            // unprotect (decrypt)
            var unprotected = CrossProtect.Unprotect(protectedBytes, entropy,
                DataProtectionScope.CurrentUser);

            // convert bytes back to text
            var result = Encoding.UTF8.GetString(unprotected);

            // print result
            Console.WriteLine(result);
            Console.ReadKey();
        }
    }
}

答案 2 :(得分:-1)

首先

我无法回答微软

TL;博士

可以回答很多这些问题:如果您需要在.NET Framework中找到API,请使用.NET Framework。

更长的答案

.NET Framework中的大量API依赖于底层Windows库(在MacO或Linux发行版上不可用),或者它们目前过于复杂而无法实现,因此它们不可用于.NET Core。

如果有一个API需要访问权限只能在.NET Framework中使用,那么(目前)最好使用.NET Framework而不是.NET Core / Mono /等。< / p>

如果您有令人信服的理由将某些内容包含在.NET Standard中,那么我会转到.NET Standard GitHub repo并要求在那里实施。