【问题标题】:ASP.NET Core - Storing encryption key to RedisASP.NET Core - 将加密密钥存储到 Redis
【发布时间】:2020-07-15 21:59:23
【问题描述】:

我对数据保护机制不是很有经验,尤其是在 .net core/Redis 中,所以我无法从官方文档中了解什么以及如何将加密密钥存储在 Redis 中:

var conn = $"{host}:{port}";
var redis = ConnectionMultiplexer.Connect(conn);

services.AddStackExchangeRedisCache(options =>
        {
            options.Configuration = conn;
        });
//here            
services.AddDataProtection()
        .PersistKeysToRedis(Redis, "DataProtection-Keys"); //where is the VALUE for the KEY? Should it be saved to Redis manually before call this?

所以我想知道我可以使用什么样的密钥(我没有,如何创建一个?),在哪里存储它以及如何在配置中指定从哪里获取它。

当我运行应用程序时,将带有键“DataProtection-Keys”的记录添加到 Redis,但我不知道该值是什么以及它是否有效。

那么另一个问题是 - 如何验证加密是否有效?

请帮助我了解基础知识,非常感谢任何示例。

【问题讨论】:

    标签: .net asp.net-core encryption redis stackexchange.redis


    【解决方案1】:

    数据保护系统将帮助创建和管理密钥,您无需自己手动创建/保存到 Redis。

    另外,.PersistKeysToRedis(Redis, "DataProtection-Keys") 方法中的"DataProtection-Keys" 是一个RedisKey,它是一条数据的唯一名称,加密所需的密钥将存储为值(RedisValue) .

    如何验证加密是否有效?

    可以参考下面的代码sn-p注入IDataProtectionProvider,用它创建IDataProtector的实例,然后对数据进行加解密。

    IDataProtector _protector;
    
    public HomeController(IDataProtectionProvider provider)
    {
        _protector = provider.CreateProtector(" WebDataProtection.Controllers.HomeController.v1");
    }
    
    public IActionResult Index()
    {
        var input = "hello world";
    
        // protect the payload
        string protectedPayload = _protector.Protect(input);
        ViewBag.ProtectedPayload = $"Protect returned: {protectedPayload}";
    
        // unprotect the payload
        string unprotectedPayload = _protector.Unprotect(protectedPayload);
        ViewBag.UnprotectedPayload = $"Unprotect returned: {unprotectedPayload}";
    
        return View();
    }
    

    测试结果

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-24
      • 1970-01-01
      • 1970-01-01
      • 2017-08-12
      • 2011-01-03
      • 1970-01-01
      • 2017-11-20
      • 2011-04-30
      相关资源
      最近更新 更多