我有这个代码来存储和恢复授权令牌(它是字母数字):
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
意味着重新启动后数据将始终不可读?难道我做错了什么?
FromHexString
andToHexString
方法完全符合您对它们的期望。