一尘不染

序列化对象时如何加密所选属性?

c#

我正在使用JSON在我的应用程序中存储某些设置。其中一些设置包含敏感信息(例如密码),而其他设置则不敏感。理想情况下,我希望能够序列化敏感属性被自动加密的对象,同时保持非敏感设置的可读性。有没有办法使用Json.Net做到这一点?我没有看到任何与加密有关的设置。


阅读 399

收藏
2020-05-19

共1个答案

一尘不染

我的解决方案:

    public string PasswordEncrypted { get; set; }

    [JsonIgnore]
    public string Password
    {
        get
        {
            var encrypted = Convert.FromBase64String(PasswordEncrypted);
            var data = ProtectedData.Unprotect(encrypted, AdditionalEntropy, DataProtectionScope.LocalMachine);
            var res = Encoding.UTF8.GetString(data);
            return res;
        }
        set
        {
            var data = Encoding.UTF8.GetBytes(value);
            var encrypted = ProtectedData.Protect(data, AdditionalEntropy, DataProtectionScope.LocalMachine);
            PasswordEncrypted = Convert.ToBase64String(encrypted);
        }

(可以减少冗长)

2020-05-19