在编写 WPF 应用程序时,PasswordBox
将输入的密码存储为SecureString
。这完全有道理。但是,我想通过 HTTP API 发送密码,并且HttpClient
PostAsync 似乎接受表单编码数据的字符串。
我知道其他人也问过相关问题,最值得注意的是SecureString 在 C# 应用程序中实用吗? https://stackoverflow.com/questions/26190938/is-securestring-ever-practical-in-a-c-sharp-application,但我还没有找到令人满意的方法来发送这个SecureString
到 Http 端点,而不先将其转换为String
。这种转换完全违背了目的SecureString
首先(因为它将明文直接放回到托管内存中)。
有没有一种规范正确的(最好是直接的)方法来做到这一点?
完全公开 - 我无法控制 HTTP API。
我认为,虽然不完美,但对您来说最好的解决方案是使用DecryptSecureString
方法,发布者rdev5 https://stackoverflow.com/users/901156/rdev5 on this https://stackoverflow.com/a/33679932/5686352答案(毕竟,密码无论如何都是通过网络以明文形式传输的)
rdev5的方法解密SecureString
到一个字符串中,按照您指示的方式处理密码,然后将其从内存中删除。这减少了密码在内存中的存储时间,从而缩短了密码被窃取的时间。
Strings.DecryptSecureString(secureString, (password) =>
{
// Do your API call here
});
P.S.:正如原帖中指出的,请确保不要保存内容password
别处。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)