C#& WPF - 将SecureString用于客户端HTTP API密码

时间:2017-10-19 16:08:14

标签: c# wpf httpclient securestring

编写WPF应用程序时,PasswordBox将输入的密码存储为SecureString。这完全有道理。但是,我想通过HTTP API发送密码,HttpClient PostAsync似乎接受表单编码数据的字符串。

我知道其他人已经提出了相关问题,最值得注意的是Is SecureString ever practical in a C# application?,但我没有找到一个令人满意的方法将此SecureString发送到Http端点,而没有先将其转换为{ {1}}。转换完全失败了String的对象(因为它将明文正确地放回到托管内存中)。

是否有正确的(并且最好是直接的)方法来执行此操作?

完整披露 - 我无法控制HTTP API。

1 个答案:

答案 0 :(得分:1)

我认为,虽然不完美,但最适合您的解决方案是使用rdev5 this发布的DecryptSecureString方法{{3}}回答(毕竟,密码正在转移)无论如何,通过网络明文)

rdev5的方法将SecureString解密为字符串,执行您告诉它对密码执行的操作,然后从内存中擦除它。这减少了密码在内存中的窗口,从而减少了从那里查看密码的时间。

Strings.DecryptSecureString(secureString, (password) =>
{
    // Do your API call here
});

P.S。:正如原帖中所指出的那样,请确保不要将password的内容保存在其他地方。