我想使用DPAPI加密SecureString,以便将其保存到磁盘。
.net DPAPI类是ProtectedData类,但是ProtectedData.Protect具有单个重载,该重载采用字节数组。没有接受SecureString的重载。
在.NET app.config文件中的加密密码中,John Galloway通过首先将SecureString转换为不安全的字符串来利用上述重载。我想避免这种情况,因为它首先破坏了使用SecureString的目的。
该ConvertFrom-SecureString的 PowerShell命令似乎做我所需要的,因为“如果没有指定键,Windows数据保护API(DPAPI)用于加密标准字符串表示”但我不知道我怎么会使用此cmdlet直接从.net或即使这样做是一个好主意。
Jeff Griffin 的博客文章《SecureString: Soup to Nuts, Part I》展示了如何做到这一点。方法是将 SecureString 转换为非托管 BSTR,然后使用 P/Invoke 调用非托管 DPAPI 函数。