Joh*_*ith 9 c# security passwords securestring
此应用程序显示带有文本框的表单,用户应在其中输入用于解密文档的密码.
我的代码看起来像这样:
string password = passwordTextBox.Text;
...
DecryptDocument(password);
Run Code Online (Sandbox Code Playgroud)
但我被告知,从技术上讲,这是一个安全漏洞,因为即使应用程序关闭后,代表密码的数据也可能保留在内存中.
我试图使用System.Security.SecureString类,但现在我正在处理指向CoTaskMem的指针,这似乎使问题变得更糟:
SecureString password = new SecureString();
foreach(char i in passwordTextBox.Text.ToCharArray())
password.AppendChar(i);
IntPtr ptr = Marshal.SecureStringToCoTaskMemAnsi(password);
int length = password.Length;
byte[] bytes = new byte[length];
Marshal.Copy(ptr, bytes, 0, length);
DecryptDocument(Encoding.Default.GetString(bytes));
Marshal.FreeCoTaskMem(ptr);
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它看起来并不像我使应用程序更安全,因为迟早我将不得不接受输入(passwordTextBox.Text)并将其转换为我可以传递给DecryptDocument()的字符串功能.
有没有办法解决这个问题,还是应该处理这个安全漏洞?
归档时间: |
|
查看次数: |
2279 次 |
最近记录: |