C# 和 WPF - 使用 SecureString 作为客户端 HTTP API 密码

C# & WPF - Using SecureString for a client-side HTTP API password

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

我知道其他人已经问过相关问题,最著名的是 Is SecureString ever practical in a C# application?,但我没有找到令人满意的方法将此 SecureString 发送到 Http 端点,而无需先将其转换为一个String。转换首先完全破坏了 SecureString 的对象(因为它将明文直接放回托管内存)。

是否有规范正确的(最好是直接的)方法来做到这一点?

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

我认为,虽然不完美,但对您来说最好的解决方案是使用 DecryptSecureString 方法,posted by rdev5 on this answer(毕竟,密码是无论如何通过网络以明文传输)

rdev5 的方法将 SecureString 解密为一个字符串,按照您告诉它的方式处理密码,然后将其从内存中清除。这减少了密码在内存中的 window,从而减少了从那里偷看密码的时间。

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

P.S.:正如原文post中指出的,只是确保不要将password的内容保存到别处。