用什么来存储密码String或Char []

时间:2014-02-20 01:32:46

标签: c# asp.net

我在Java中阅读了以下文章(为什么charcter数组比存储密码的字符串更好选择)

1)因为如果你将密码存储为纯文本字符串在Java中是不可变的,它将在内存中可用,直到垃圾收集器清除它并且因为使用了String:在字符串池中为了可重用性,它很可能会在长时间留在记忆中,这会造成安全威胁。由于任何有权访问内存转储的人都可以以明文形式找到密码,这是另一个原因,您应该始终使用加密密码而不是纯文本。由于字符串是不可变的,所以不能更改字符串的内容,因为任何更改都会产生新的字符串,而如果你使用char [],你仍然可以将所有元素设置为空白或零。因此,在字符数组中存储密码可以明显降低窃取密码的安全风险。

2)Java本身建议使用JPasswordField的getPassword()方法,它返回一个char []和不推荐使用的getText()方法,它以明文形式返回密码,说明安全原因。很好地遵循Java团队的建议并坚持标准而不是反对它。

3)使用String时,始终存在在日志文件或控制台中打印纯文本的风险,但如果使用Array,则不会打印数组的内容,而是打印其内存位置。虽然不是一个真正的原因,但仍然有意义。

String strPassword="Unknown";
char[] charPassword= new char[]{'U','n','k','w','o','n'};
System.out.println("String password: " + strPassword);
System.out.println("Character password: " + charPassword);

输出:

字符串密码:未知 字符的密码:[C @ 110b053

问题:关于上述文章如何在.Net中运行,它是相同还是别的,有人可以给我深入了解String和char,它们是如何工作的?

1 个答案:

答案 0 :(得分:-1)

每种语言都有您可以搜索的参考。这是字符串和字符串的两个。

http://msdn.microsoft.com/en-us/library/362314fe.aspx

http://www.cplusplus.com/doc/tutorial/ntcs/

希望这有帮助