【发布时间】:2021-03-26 09:38:33
【问题描述】:
我编写了一个使用 RtlEncryptMemory/RtlDecryptMemory 加密/解密字符串的 C# 片段。然后将该字符串保存在配置文件中,一切正常,但问题是一旦我注销/登录,我就无法再解密该字符串。我正在使用 RTL_ENCRYPT_OPTION_SAME_LOGON 选项,这意味着内部机制使用 Windows 会话中的某些内容来执行解密。我正在寻找一种以相同方式工作但与网络用户(或令牌等)相关联的解决方案。 Windows 是否已经提供了一些东西?
我的目标是能够从任何地方解密字符串,只要该进程在同一用户下运行(网络凭据)。我也不想让用户输入密码或使用内部值,因为这可能会受到损害。理想情况下,它就像 RTL 函数,但提供 RTL_ENCRYPT_OPTION_SAME_USER 选项。
谢谢! 尼克
【问题讨论】:
-
如果你想存储字符串,你不应该使用 RtlEncryptMemory,它只是为了保证字符串在运行的应用程序内存中的安全,因此它可以被存储/序列化和解密。
-
看看这个线程,我认为 DPAPI 会满足你的需求。 stackoverflow.com/questions/34194223/…
-
是的,我完全理解 RtlEncryptMemory 不是要走的路。看起来凯文的建议可能是要走的路,我将不得不对此进行原型设计。感谢您的回复。
-
我刚刚测试完 Kevin 的 DPAPI 建议,这是最符合我要求的。不幸的是,加密数据仍然与机器密钥相关联,但它比我使用 RTL 的原始实现要好。凯文,如果您不介意将您的建议作为解决方案发布,我可以将其标记为已接受。谢谢!
-
@Teknex1 - 完成!很高兴它有帮助。
标签: c# encryption