从加密文件添加/读取配置

时间:2017-06-07 19:38:39

标签: c# configuration asp.net-core

我走了创建自己的reserve()的道路,如果文件尚未加密,它会对文件进行加密,并且还可以对其进行解密。

我现在正在努力想出一种方法,以与ConfigurationProvider类似的方式将解密的appsettings.json内容(解密字符串)添加到配置中。

最后,我希望能够在.AddJsonFile()中调用.AddEncryptedJson("appsettings.json"),这会解密文件并添加所有必要的配置。

Startup.cs

1 个答案:

答案 0 :(得分:1)

您可以通过查看aspnet / Configuration存储库中的内部JsonConfigurationFileParserhere来解决此问题。 通过在项目中创建类似的类,您将能够成功解析解密的JSON字符串。

要使用解析器,只需将jsonString作为Stream提供给其Parse()方法即可。您的UnencryptMyConfiguration()方法将如下所示:

private IDictionary<string, string> UnencryptMyConfiguration()
{
    EncryptIfNotEncrypted();

    var configFileBytes = File.ReadAllBytes(_filePath);

    var decryptedData = _privKey.Decrypt(configFileBytes, RSAEncryptionPadding.Pkcs1);
    var jsonString = Encoding.UTF8.GetString(decryptedData);

    //treat the decrypted string as a Stream to let JsonConfigurationFileParser handle it
    using (MemoryStream stream = new MemoryStream())
    {
        var parser = new JsonConfigurationFileParser();
        StreamWriter writer = new StreamWriter(stream);
        writer.Write(jsonString);
        writer.Flush();
        stream.Position = 0;
        return parser.Parse(stream);
    };
}