gpt4 book ai didi

c# - ProtectedMemory.Unprotect 输出垃圾

转载 作者:行者123 更新时间:2023-11-30 22:02:54 27 4
gpt4 key购买 nike

我有这段代码可以存储和恢复授权 token (字母数字):

public static void Store (string token)
{
byte[] buffer = Encoding.UTF8.GetBytes (token.PadRight (32));
ProtectedMemory.Protect (buffer, MemoryProtectionScope.SameLogon);
Settings.Default.UserToken = buffer.ToHexString ();
Settings.Default.Save ();
}

public static string Retrieve ()
{
byte[] buffer = Settings.Default.UserToken.FromHexString ();
if (buffer.Length == 0)
return String.Empty;
ProtectedMemory.Unprotect (buffer, MemoryProtectionScope.SameLogon);
return Encoding.UTF8.GetString (buffer).Trim ();
}

它大部分工作正常,尽管有时我会产生垃圾(许多 FD 字节,以及一些可读的字节)。我怀疑这只会在我重新启动时发生,但我在重现它时遇到了一些困难。

这是预期的行为吗?也就是说,MemoryProtectionScope.SameLogon 是否意味着重启后数据将始终不可读?我做错了什么吗?

FromHexStringToHexString 方法完全符合您的期望。

最佳答案

是的,ProtectedMemory 在您重新启动后总是会失败(或者对于不同的 MemoryProtectionScope,重新启动进程等)。它仅用于保护内存,而不是用于存储的数据。

您想改用 ProtectedData:

ProtectedData.Protect(buffer, null, DataProtectionScope.CurrentUser);

这两者都是基于 DPAPI(随 Windows 2000 引入)的托管包装器。在 .NET 安全博客上有很多帖子提供了更多详细信息 - http://blogs.msdn.com/b/shawnfa/archive/2004/05/05/126825.aspx

关于c# - ProtectedMemory.Unprotect 输出垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26524080/

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