gpt4 book ai didi

c# - IIS 应用程序上的 ProtectedData.Unprotect - 在 IISRESET 后无法工作

转载 作者:太空宇宙 更新时间:2023-11-03 16:01:47 26 4
gpt4 key购买 nike

我需要在本地数据库中存储和检索敏感数据 - 此数据由 Web 应用程序使用。

为了保护上述数据,我选择使用 ProtectedData 类。

IIS 应用程序正在使用特定的 AD 用户运行(高级设置中的身份属性)。

一切正常,直到我执行 IISRESET - 此时,似乎为了 ProtectedData 类的目的更改了身份,我留下了无法解密的数据 - 我正在获取 Key not valid for use in specified state 异常。

这是我使用的代码:

    static public string Encrypt(string data)
{
var encryptedData = ProtectedData.Protect(System.Text.Encoding.UTF8.GetBytes(data), entropy, DataProtectionScope.CurrentUser);
return Convert.ToBase64String(encryptedData);
}

static public string Decrypt(string base64string)
{
var encryptedData = Convert.FromBase64String(base64string);
return System.Text.Encoding.UTF8.GetString(ProtectedData.Unprotect(encryptedData, entropy, DataProtectionScope.CurrentUser));
}

对于我的应用程序, 显然是静态的。

这是怎么回事?我的印象是 DataProtectionScope.CurrentUser 将使用,顾名思义,当前用户 - 据我所知,这应该是应用程序池标识。为什么当我执行 IISRESET 时,它看起来像发生了变化?

最佳答案

虽然我不知道为什么会这样,但我更改了代码以改为使用 AES 加密 - 这工作正常。

虽然不是问题的答案,但我认为这是一个值得一提的有效解决方法。

编辑:

我想我已经找到导致问题的原因(我仍然不完全知道为什么会发生这种情况,但我今天确实注意到了一些事情)。

如果 Web 应用程序正在使用 ApplicationPool 标识,那么一切都很好并且 DPAPI 应该在 IISRESET 后继续工作。 但是如果我将身份更改为在 AD 中定义的特定用户,那么在回收应用程序池后事情就会变得一团糟。

我很幸运在这种特殊情况下,我不再需要特定的 AD 用户,主要加密基于 AES(当负载平衡进入等式时,DPAPI 不能用于访问共享资源)仅使用 DPAPI用于加密 AES key 的本地副本。

关于c# - IIS 应用程序上的 ProtectedData.Unprotect - 在 IISRESET 后无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20998290/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com