这就带来了最主要的问题, 你无法准确控制或者预测一个特定字符串的生命周期. 一个
以
string 形式呈现的敏感数据(比如密码)很有可能在内存中一直存在, 而你却预测
它在超出某个特定函数的作用域的时候就被垃圾回收了
. 这样, 当发生操作系统换
页 的 时 候
( 而 这 也 往 往 是 可 能 发 生 的 ), 这 个 敏 感 数 据 就 被 保 存 到 本 地 文 件
pagefile.sys 当中, 或者当操作系统休眠的时候, 敏感数据进入 hiberfil.sys 中.一
个可能的敏感数据泄漏过程是
:
使用
SecureString 类
现在既然 String 靠不住了,我们能有什么简单的方法来特别的保护我的敏感数据吗? 幸
运的是
, .NET 从 Version 2.0 开始, 为我们提供了一套基于 DPAPI
的解决方法
-
SecureString.
SecureString 类具有以下特性:
SecureString 中的内容是加密之后的,而不是平文;
使用
windows 的加密方案 DPAPI ;
SecureString 只能在基于 NT 的平台上使用