查看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的一部分
答案 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)
我无法回答微软
可以回答很多这些问题:如果您需要在.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并要求在那里实施。