编写WPF应用程序时,PasswordBox
将输入的密码存储为SecureString
。这完全有道理。但是,我想通过HTTP API发送密码,HttpClient
PostAsync似乎接受表单编码数据的字符串。
我知道其他人已经提出了相关问题,最值得注意的是Is SecureString ever practical in a C# application?,但我没有找到一个令人满意的方法将此SecureString
发送到Http端点,而没有先将其转换为{ {1}}。转换完全失败了String
的对象(因为它将明文正确地放回到托管内存中)。
是否有正确的(并且最好是直接的)方法来执行此操作?
完整披露 - 我无法控制HTTP API。
答案 0 :(得分:1)
我认为,虽然不完美,但最适合您的解决方案是使用rdev5 this发布的DecryptSecureString
方法{{3}}回答(毕竟,密码正在转移)无论如何,通过网络明文)
rdev5的方法将SecureString
解密为字符串,执行您告诉它对密码执行的操作,然后从内存中擦除它。这减少了密码在内存中的窗口,从而减少了从那里查看密码的时间。
Strings.DecryptSecureString(secureString, (password) =>
{
// Do your API call here
});
P.S。:正如原帖中所指出的那样,请确保不要将password
的内容保存在其他地方。