黑客业务

24小时接单的黑客,黑客业务,黑客怎么找,网络黑客,黑客技术

如何在 ASP.Net Core 中实现数据保护API

本文转载自微信公众号「码农读书 」,作者码农读书 。转载本文请联系 码农读书 微信官方账号。

在 ASP.Net Core 数据保护栈中提供了一种非常简单的方法来加密API,为了保护数据的安全,通常是 数据加密 和 数据解密。让我们来看看如何使用这篇文章来保护数据API。

了解加密和哈希

在安全领域,加密和hash这是两个非常重要的概念,经常被开发者混合,事实上,这是错误的,加密是使用加密算法将数据转换为另一个数据,但也要注意,这是一个双向操作,加密数据只能通过合适的密钥解密,加密数据也称为密文本,在当今的系统间通信中,数据加密非常简单和高效。

相比之下,hash 是一种将 text 转化为 新闻摘要 的技术,值得注意的是,hash值是唯一的,这意味着不同text不可能生成相同的 文本hash 值,还要注意,当 text 转成了 hash 值之后,你很难再吃 hash 值还原成 text 文本。

一般来说,加密是一种双向技术,可以使用相同的密钥加密数据,hash它是一种一种单向技术text 转化为 新闻摘要,很难将其还原为原始text。

安装 Microsoft.AspNetCore.DataProtection

使用 数据保护API,可以使用 Visual Studio 2019 中的 NuGet package manager 可视化界面也可以使用 NuGet package manager console 将以下命令键入命令行窗口。

  • dotnetaddpackageMicrosoft.AspNetCore.DataProtection-Version2.2.0
  • 配置数据保护API

    按照 ASP.NET Core 的默认惯例,首先是 DataProtection 注入到 ServiceCollection 中,如下代码所示。

  • publicclassStartup
  • {
  • //Thismethodgetscalledbytheruntime.Usethismethodtoaddservicestothecontainer.
  • publicvoidConfigureServices(IServiceCollectionservices)
  • {
  • services.AddControllers();
  • services.AddDataProtection();
  • }
  • }
  • 如果您想将用于加密和解密的 密钥 单独存储在文件系统中,您可以在注入时稍微修改,如下代码所示:

  • publicclassStartup
  • {
  • //Thismethodgetscalledbytheruntime.Usethismethodtoaddservicestothecontainer.
  • publicvoidConfigureServices(IServiceCollectionservices)
  • {
  • services.AddControllers();
  • services.AddDataProtection().PersistKeysToFileSystem(newDirectoryInfo(@"D:\IDG\Temp"));
  • }
  • }
  • 值得注意的是, 密钥是由 数据保护的API 在默认情况下创建和维护 key 的有效期 90天。如果您有特殊需要,也可以指定 key 的有效期如下代码所示:

  • publicclassStartup
  • {
  • publicvoidConfigureServices(IServiceCollectionservices)
  • {
  • services.AddControllers();
  • services.ConfigureDataProtection(dp=>
  • {
  • dp.PersistKeysToFileSystem(newDirectoryInfo(@"D:\IDG\Temp"));
  • dp.SetDefaultKeyLifetime(TimeSpan.FromDays(7));
  • });
  • }
  • }
  • 您甚至可以使用证书来保护密钥或直接使用 Azure Key Valult 存储密钥。如果您想使用后者,您可以使用以下代码进行配置。

  • publicclassStartup
  • {
  • publicvoidConfigureServices(IServiceCollectionservices)
  • {
  • services.AddControllers();
  • services.AddDataProtection().PersistKeysToAzureBlobStorage(newUri("SpecifytheUrihere"))
  • .ProtectKeysWithAzureKeyVault("keyIdentifier","clientId","clientSecret");
  • }
  • }
  • 数据加密

    现在 数据保护API 已成功安装配置。接下来,我们来看看如何在 Controller 使用数据保护API。

  • [ApiController]
  • [Route("[controller]")]
  • publicclassWeatherForecastController:ControllerBase
  • {
  • IDataProtector_protector;
  • publicWeatherForecastController(IDataProtectionProviderprovider)
  • {
  • _protector=provider.CreateProtector(GetType().FullName);
  • }
  • [HttpGet]
  • publicstringGet()
  • {
  • varprotectedData=_protector.Protect("HelloWorld");
  • returnprotectedData;
  • }
  • }
  • 从图中可以看出,HelloWorld 已成功加密并返回到前端。顺便说一句,为了尽可能多地重复使用, 数据保护可以单独使用一个帮助类别API 数据加密解密:

  • publicclassDataProtectionHelper
  • {
  • privatereadonlyIDataProtectionProvider_dataProtectionProvider;
  • publicDataProtectionHelper(IDataProtectionProviderdataProtectionProvider)
  • {
  • _dataProtectionProvider=dataProtectionProvider;
  • }
  • publicstringEncrypt(stringtextToEncrypt,stringkey)
  • {
  • return_dataProtectionProvider.CreateProtector(key).Protect(textToEncrypt);
  • }
  • publicstringDecrypt(stringcipherText,stringkey)
  • {
  • return_dataProtectionProvider.CreateProtector(key).Unprotect(cipherText);
  • }
  • }
  • 值得注意的是,上面的 Encrypt 和 Decrypt 方法的第二个参数是密钥key,这样, 密钥 的控制权就在你手里。

    数据保护API 使用起来仍然非常简单和灵活。使用这种方法生成密文数据是一种很好的方法。常见场景太多,如:cookie,querystring 中的数据和过期时间内的加密解密操作是安全的。如果您的密文需要很长时间,建议您在此场景中实现 加密解密 逻辑。

    译文链接:https://www.infoworld.com/article/3431139/how-to-use-the-data-protection-api-in-aspnet-core.html

       
    • 评论列表:
    •  馥妴秙暔
       发布于 2022-05-28 15:26:19  回复该评论
    • 是由 数据保护的API 在默认情况下创建和维护 key 的有效期 90天。如果您有特殊需要,也可以指定 key 的有效期如下代码所示:publicclassStartup{public

    发表评论:

    Powered By

    Copyright Your WebSite.Some Rights Reserved.