【问题标题】:C# & WPF - Using SecureString for a client-side HTTP API passwordC# & WPF - 使用 SecureString 作为客户端 HTTP API 密码
【发布时间】:2017-10-19 16:08:14
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c# wpf httpclient securestring


    【解决方案1】:

    我认为,虽然不完美,但对您来说最好的解决方案是使用rdev5this 答案上发布的DecryptSecureString 方法(毕竟,密码无论如何都是通过网络以明文形式传输的)

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

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

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

    【讨论】:

    • 它可能不是全局理想的,但它确实解决了缺少DisposableString 类型的问题。所以谢谢。我想指出,由于 HTTP API 是安全连接,因此密码在技术上不是以明文形式发送的。
    猜你喜欢
    • 2011-07-17
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多