2017-10-19 106 views
1

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

我知道其他人都问相关的问题,最明显的是Is SecureString ever practical in a C# application?,但我还没有找到一个令人满意的方法来此SecureString发送到HTTP端点,而无需首先将其转换为String。转换彻底击败了SecureString的对象(因为它将明文放回托管内存中)。

是否有正确的(并且最好直截了当的)方式来执行此操作?

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

回答

1

我认为,虽然并不完美,最适合你的解决方案是使用DecryptSecureString方法,发表rdev5this答案(毕竟,密码被以明文方式在网络上转移反正)

rdev5的方法将SecureString解密为一个字符串,做你告诉它处理密码然后从内存中擦除它。这减少了密码在内存中的窗口,从而缩短了从那里窥视密码的时间。

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

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

+0

它可能不是全球理想的,但它确实解决了缺少'DisposableString'类型的问题。所以谢谢。我想说明的是,由于HTTP API是一个安全的连接,因此密码在技术上并不是以明文形式发送的。 –