我试图实现以下目标:
为了确保客户端计算机尽可能地保存敏感数据(在SecureString中):
我非常关注编码 - 我知道C#将字符串数据保存为UTF-16,但在执行以下操作时可能无法解释它吗?:< / p>
我应该担心编码吗? 谢谢!
===编辑 - 可能的解决方案===
在咨询EBrown后,他发现microsoft使用以下BOM: https://msdn.microsoft.com/en-us/library/windows/desktop/dd374101%28v=vs.85%29.aspx
转换为BSTR字节,我使用以下方法(内部有点改变): https://stackoverflow.com/a/25190648/1845545
并且,因为C#使用UTF-16编码,我将使用以下命令将其转换回来:Encoding.Unicode.GetString(bt);
答案 0 :(得分:2)
SecureString
已经提供了防止核心转储或交换文件泄漏的保护,甚至可以防止读取进程内存:
SecureString对象的值可能使用底层操作系统提供的保护机制,例如加密
报价&#39;操作系统机制&#39;是CryptProtectMemory
:
CryptProtectMemory函数对内存进行加密,以防止其他人查看您进程中的敏感信息。例如,使用CryptProtectMemory函数加密包含密码的内存。加密密码可防止其他人在将进程分页到交换文件时查看密码。
通过尝试该计划,您支持所有您实现的只是SecureString
提供的安全性的严重弱化。在WCF传输过程中,您在进程内存中显示密码,您将通过不必要地使用网络暴露您的密码(HTTPS不会防止像Lenovo SuperFish MITM这样的东西,还有更多)。