2

这样做有什么更好的吗

char[] sec = { 'a', 'b', 'c'};

SecureString s = new SecureString();
foreach (char c in sec) {
    s.AppendChar(c);
}

IntPtr pointerName = System.Runtime.InteropServices.Marshal.SecureStringToBSTR(s);
String secret = System.Runtime.InteropServices.Marshal.PtrToStringBSTR(pointerName);

比这个

String secret = "abc";

或这个

char[] sec = { 'a', 'b', 'c'};
String secret = new Secret(sec);

如果我想保护“abc”不被反编译的 MSIL 代码检测到?

4

2 回答 2

6

SecureString 将在内存中保护您的字符串,编译到您的 MSIL 中的字符串将仍然存在。如果您需要隐藏敏感信息,请考虑如下所述的加密 app.config: http ://weblogs.asp.net/jgalloway/archive/2008/04/13/encrypting-passwords-in-a-net-app -配置文件.aspx

HTH 多米尼克

于 2011-07-01T11:04:26.380 回答
3

不会。SecureString的存在是为了防止敏感文本(例如密码)被保存在内存中。

于 2011-07-01T11:03:00.680 回答