- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这段代码可以存储和恢复授权 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
是否意味着重启后数据将始终不可读?我做错了什么吗?
FromHexString
和 ToHexString
方法完全符合您的期望。
最佳答案
是的,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/
我正在阅读 ProtectedMemory C# 中的类(它使用 Windows 中的数据保护 API (DPAPI)),我看到为了使用类的 Protect() 方法,要加密的数据必须存储在大小/长度
我有这段代码可以存储和恢复授权 token (字母数字): public static void Store (string token) { byte[] buffer = Encoding
我是一名优秀的程序员,十分优秀!